Python复习要点–Numpy基础教程

NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。

一、Numpy array对象的属性:
 shape
数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,它的shape属性将是(2,3)。
 size
数组元素的总个数,等于shape属性中元组元素的乘积。
 dtype
一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。另外NumPy提供它自己的数据类型。
 reshape
改变数组的形状,重新生成新的Array。注意:形状改变前后,必须保证元素个数是相同的。
例子:
>>> from numpy import *
>>> a = arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.dtype.name
‘int32’
>>> a.size
15
>>> type(a)
numpy.ndarray
>>> b = array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
numpy.ndarray
二、array创建
常见地,有以下几种创建数组的方法:
 可以使用 array 函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。
>>> from numpy import *
>>> a = array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> a.dtype
dtype(‘int32’)
>>> b = array([1.2, 3.5, 5.1])
>>> b.dtype
dtype(‘float64’)
 数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等。
>>> b = array( [ (1.5,2,3), (4,5,6) ] )
>>> b
array([[ 1.5, 2. , 3. ],
[ 4. , 5. , 6. ]])
数组类型可以在创建时显示指定
>>> c = array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
 arange方法
Numpy中的arange函数用于创建等差数组。arange与Python中的range函数非常相似,比如在for循环中,几乎都用到了range。arange与range的区别仅仅是arange返回的是一个array,而range返回的是list。
>>> import numpy as np
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(1,15,2)
array([ 1, 3, 5, 7, 9, 11, 13])
>>> np.arange(1,15,2,dtype=np.float32)
array([ 1., 3., 5., 7., 9., 11., 13.], dtype=float32)
 zeros和zeros_like
两者都是创建全零的array 。区别在于用法的不同。
a) zeros。 函数定义如下:
numpy.zeros(shape, dtype=float)
参数:
shape:int或ints序列。新数组的形状,例如(2,3)或2。
dtype:数据类型,可不写。数组的所需数据类型,例如numpy.int8。默认值为 numpy.float64。
举例:
>>>np.zeros(5)
array([ 0., 0., 0., 0., 0.])
>>>np.zeros((5,), dtype=np.int)
array([0, 0, 0, 0, 0])
>>>np.zeros((2, 1))
array([[ 0.],
[ 0.]])
>>>s = (2,2)
>>>np.zeros(s)
array([[ 0., 0.],
[ 0., 0.]])
b) zeros_like。函数定义如下:
numpy.zeros_like(a, dtype=None)
参数:
a:a是一个array类型的对象。
dtype:数据类型。可以不写。
举例:
>>> x = np.arange(6)
>>> x = x.reshape((2, 3))
>>> x
array([[0, 1, 2],
[3, 4, 5]])
>>> np.zeros_like(x)
array([[0, 0, 0],
[0, 0, 0]])
>>> y = np.arange(3, dtype=float)
>>> y
array([ 0., 1., 2.])
>>> np.zeros_like(y)
array([ 0., 0., 0.])
 ones和ones_like
两者都是创建全1的array 。区别在于用法的不同。
a) ones。 函数定义如下:
numpy. ones (shape, dtype=float)
参数:
shape:int或ints序列。新数组的形状,例如(2,3)或2。
dtype:数据类型,可不写。数组的所需数据类型,例如numpy.int8。默认值为 numpy.float64。
举例:
>>> np.ones(5)
array([ 1., 1., 1., 1., 1.])
>>> np.ones((5,), dtype=int)
array([1, 1, 1, 1, 1])
>>> np.ones((2, 1))
array([[ 1.],
[ 1.]])
>>> s = (2,2)
>>> np.ones(s)
array([[ 1., 1.],
[ 1., 1.]])
b) ones_like。函数定义如下:
numpy. ones_like (a, dtype=None)
参数:
a:a是一个array类型的对象。
dtype:数据类型。可以不写。
举例:
>>> x = np.arange(6)
>>> x = x.reshape((2, 3))
>>> x
array([[0, 1, 2],
[3, 4, 5]])
>>> np.ones_like(x)
array([[1, 1, 1],
[1, 1, 1]])
>>> y = np.arange(3, dtype=float)
>>> y
array([ 0., 1., 2.])
>>> np.ones_like(y)
array([ 1., 1., 1.])
 eye()
Numpy的eye函数用于生成对角矩阵。函数定义如下:
numpy.eye(N,M=None, k=0, dtype=None)
参数:
N:生成对角矩阵的行数。
M:生成对角矩阵的列数。可以不写,默认与N相同。
k: 默认情况下输出的是对角线全“1”,其余全“0”的方阵,如果k为正整数,则在右上方第k条对角线全“1”其余全“0”,k为负整数则在左下方第k条对角线全“1”其余全“0”。
举例:
>>> eye(3)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]])
>>> np.eye(3, k=1)
array([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 0., 0.]])
 identity
identity只能获取方阵,也即标准意义的单位阵。
np.identity(n, dtype=None)
参数:
n:方阵行数(列数)
dtype:数据类型。
举例:
>>> np.identity(3)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> np.identity(3,dtype=np.int32)
array([[ 1, 0, 0],
[ 0, 1, 0],
[ 0, 0, 1]])
 empty和empty_like
两者都是创建一个内容随机的array 。区别在于用法的不同。
a) empty
numpy.empty(shape, dtype=float)
参数:
shape:int或ints序列。新数组的形状,例如(2,3)或2。
dtype:数据类型,可不写。数组的所需数据类型,例如numpy.int8。默认值为 numpy.float64。
举例:
>>> np.empty([2, 2])
array([[ -9.74499359e+001, 6.69583040e-309],
[ 2.13182611e-314, 3.06959433e-309]])
>>> np.empty([2, 2], dtype=int)
array([[-1073741821, -1067949133],
[ 496041986, 19249760]])
b) empty_like
empty_like(a, dtype=None)
参数:
a:a是一个array类型的对象。
dtype:数据类型。可以不写。
举例:
>>> a = ([1,2,3], [4,5,6])
>>> np.empty_like(a)
array([[-1073741821, -1073741821, 3],
[ 0, 0, -1073741821]])
>>> a = np.array([[1., 2., 3.],[4.,5.,6.]])
>>> np.empty_like(a)
array([[ -2.00000715e+000, 1.48219694e-323, -2.00000572e+000],
[ 4.38791518e-305, -2.00000715e+000, 4.17269252e-309]])
三、通用函数
 where
np.where(condition)
举例:
>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5) # 返回索引
(array([2, 3, 4]),)
>>> a[np.where(a > 5)] # 等价于 a[a>5]
array([ 6, 8, 10])
 var()
numpy.var(a, axis=None, dtype=None,)
>>> a = np.array([[1, 2], [3, 4]])
>>> np.var(a)
1.25
>>> np.var(a, axis=0) #按列
array([ 1., 1.])
>>> np.var(a, axis=1) #按行
array([ 0.25, 0.25])
>>> a = np.zeros((2, 512*512), dtype=np.float32)
>>> a[0, :] = 1.0
>>> a[1, :] = 0.1
>>> np.var(a)
0.20250003
>>> np.var(a, dtype=np.float64)
0.20249999932944759
 sum

sum()
sum() 没有axis参数表示全部数据相加
axis=0,表示按列相加
axis=1,表示按行相加
举例:
a = array([[1,2,3],[4,5,6]])
print(a)
b = sum(a)
print (b)
c = sum(a, axis=0)
print(c)
d = sum(a, axis=1)
print(d)
sum条件用法:
>>> a=np.array([[1,2,3],[4,5,6]]
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> np.sum(a>4)
2
 meanmeanmeanmean() :求取均值 :求取均值
numpy.mean(a, axis=None, dtype=None)
num1 = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6]])
np.mean(num1) # 对所有元素求均值
np.mean(num1,0) # 压缩行,对各列求均值
np.mean(num1,1) # 压缩列,对各行求均值
 min和max
numpy.min(axis=None, out=None)
numpy.max(axis=None, out=None)
举例:
>>>import numpy as np
>>>a = np.array([[1,5,3],[4,2,6]])
>>>print(a.min()) #无参,所有中的最小值
>>>print(a.min(0)) # axis=0; 每列的最小值
>>>print(a.min(1)) # axis=1;每行的最小值
 其他通用函数
举例:
>>> a = array([20, 30, 40, 50])
>>> b = array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([True, True, False, False], dtype=bool)
不像许多矩阵语言,NumPy中的乘法运算符 dot 函数或创建矩阵对象实现.
>>> A = array( [[1,1], [0,1]] )
>>> B = array( [[2,0], [3,4]] )
>>> A*B # elementwise product
array([[2, 0],
[0, 4]])
>>> dot(A,B) # matrix product
array([[5, 4],
[3, 4]])
>>> a = ones((2,3), dtype=int)
>>> b = random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
[3, 3, 3]])
>>> b += a
>>> b
array([[ 3.69092703, 3.8324276 , 3.0114541 ],
[ 3.18679111, 3.3039349 , 3.37600289]])
>>> a += b # b is converted to integer type
>>> a
array([[6, 6, 6],
[6, 6, 6]])
>>> a = random.random((2,3))
>>> a
array([[ 0.6903007 , 0.39168346, 0.16524769],
[ 0.48819875, 0.77188505, 0.94792155]])
>>> a.sum()
3.4552372100521485
>>> a.min()
0.16524768654743593
>>> a.max()
0.9479215542670073
这些运算默认应用到数组好像它就是一个数字组成的列表,无关数组的形状。然而,指定 axis 参数你可以吧运算应用到数组指定的轴上:
>>> b = arange(12).reshape(3,4)
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b.sum(axis=0) # sum of each column
array([12, 15, 18, 21])
>>> b.min(axis=1) # min of each row
array([0, 4, 8])
>>> B = arange(3)
>>> B
array([0, 1, 2])
>>> exp(B)
array([ 1. , 2.71828183, 7.3890561 ])
>>> sqrt(B)
array([ 0. , 1. , 1.41421356])
>>> C = array([2., -1., 4.])
>>> add(B, C)
array([ 2., 0., 6.])
附: Numpy数据类型

 

 

 

发表评论

%d 博主赞过: