python函数、类和Numpy

一、函数Functions

  • 定义一个函数,以下是简单的规则:
  1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  2. 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  3. 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  4. 函数内容以冒号起始,并且缩进。
  5. return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
二、类Classes

用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。使用class语句来创建一个新类,class之后为类的名称并以冒号结尾。

三、Numpy

Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。

1.数组

一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型,可以通过非负整型数的元组来访问。维度的数量被称为数组的阶,数组的大小是一个由整型数构成的元组,可以描述数组不同维度上的大小

  • 定义数组
  1. shape和dtype方法查看数组的维度和数据格式
  2. shape()函数:对于一个二维数组 set = array([[1, 2], [3, 4], [5, 6], [7, 9]]);求数组的行数 set.shape[0];求数组的列数 set.shape[1]
  3. np.arange(n) ; 元素从0到n-1的ndarray类型 

  1. numpy函数
  • zeros()函数:创建的数组默认是浮点型的,可以使用第二参数设置数组的类型
  • np.zeros((shape), ddtype = np.int32) : 生成int32型的全0 
  • eye()函数:创建单位矩阵
  • np.arange(n) ; 元素从0到n-1的ndarray类型 
  • np.ones(shape): 生成全1 
  • np.full(shape, val): 生成全为val 


2.访问数组

  • 切片:和Python列表类似,numpy数组可以使用切片语法。因为数组可以是多维的,所以必须为每个维度指定好切片。

  • 可以同时使用整型和切片语法来访问数组。但是,这样做会产生一个比原数组低阶的新数组。2.整型数组访问

使用切片语法访问数组时,得到的总是原数组的一个子集。整型数组访问允许利用其它数组的数据构建一个新的数组

扫描二维码关注公众号,回复: 1254279 查看本文章

print a[[0, 1, 2], [0, 1, 0]]等价于print np.array([a[0, 0], a[1, 1], a[2, 0]]) 


选择或者更改矩阵中每行中的一个元素

print a[np.arange(4), b]  等价于print a[[0,1,2,3],[0,2,0,1]]  


3.布尔型数组访问

布尔型数组访问可以让你选择数组中任意元素。通常,这种访问方式用于选取数组中满足某些条件的元素


4.数据类型

每个Numpy数组都是数据类型相同的元素组成的网格。


5.数组计算

基本数学计算函数会对数组中元素逐个进行计算,既可以利用操作符重载,也可以使用函数方式.在Numpy中*是元素逐个相乘,使用dot来进行矩阵乘法

add(+) //加法

subtract  (-)//减法

multiply (*) //乘法

divide  (/) //除法

sqrt   //平方根

x.T   //转置






6.广播Broadcasting

广播用以描述numpy中对两个形状不同的阵列进行数学计算的处理机制。较小的阵列“广播”到较大阵列相同的形状尺度上,使它们对等以可以进行数学计算。广播提供了一种向量化阵列的操作方式,因此Python不需要像C一样循环。广播操作不需要数据复制,通常执行效率非常高。然而,有时广播是个坏主意,可能会导致内存浪费以致计算减慢。


对两个数组使用广播机制要遵守下列规则:

  1. 如果数组的秩不同,使用1来将秩较小的数组进行扩展,直到两个数组的尺寸的长度都一样。
  2. 如果两个数组在某个维度上的长度是一样的,或者其中一个数组在该维度上长度为1,那么我们就说这两个数组在该维度上是相容的。
  3. 如果两个数组在所有维度上都是相容的,他们就能使用广播。
  4. 如果两个输入数组的尺寸不同,那么注意其中较大的那个尺寸。因为广播之后,两个数组的尺寸将和那个较大的尺寸一样。
  5. 在任何一个维度上,如果一个数组的长度为1,另一个数组长度大于1,那么在该维度上,就好像是对第一个数组进行了复制。


猜你喜欢

转载自blog.csdn.net/nysai/article/details/80512163