先贴个链接
numpy官方函数文档
numpy函数文档民间汉化
numpy最大的特点是n维数组对象ndarray,它可以容纳各种类型数据,是最重要的操作对象
以下代码使用array函数来创建ndarray对象,并展现了几个常用属性
import numpy as np
data = np.array([[2,3,7],[1,4,8]]) #使用array函数
print(data.ndim) #返回维数
print(data.shape) #返回行和列数
print(data.dtype) #返回数据类型
结果如下
2
(2, 3)
int32
还有一些函数可以创建ndarray对象
import numpy as np
mat0 = np.zeros((2,3)) #全0
mat1 = np.ones((2,3)) #全1
mat_eye = np.eye(3) #单位阵
mat_empty = np.empty((2,3)) #全为近似于0
mat_range = np.arange(6) #序列
print('mat0\n{0}\nmat1\n{1}\nmat_eye\n{2}\nmat_empty\n{3}\nmat_arange\n{4}'.format(mat0,mat1,mat_eye,mat_empty,mat_range))
结果如下
mat0
[[0. 0. 0.]
[0. 0. 0.]]
mat1
[[1. 1. 1.]
[1. 1. 1.]]
mat_eye
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
mat_empty
[[5.11798224e-307 1.37961370e-306 1.24610383e-306]
[1.78020169e-306 1.78020984e-306 8.34454050e-308]]
mat_arange
[0 1 2 3 4 5]
对数据进行普通索引时,有两种方式
import numpy as np
data = np.array([[2,3,7],[1,4,8]])
print(data[1,2])
print(data[1][2])
结果如下
8
8
当ndarray对象为多维数组时,可以采用多级索引,如果没有索引到最低维度,则会返回一个维度低一点的ndarray。下面建立一个2×2×3数组arr3d进行说明
import numpy as np
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr3d)
print('\n\n')
print(arr3d[0])
结果如下
[[[ 1 2 3]
[ 4 5 6]][[ 7 8 9]
[10 11 12]]][[1 2 3]
[4 5 6]]
下面介绍布尔索引,通过该索引我们可以将类别和数据对应起来。
import numpy as np
lable= np.array(['a','b','c','a']) #分为a,b,c三类
data = np.array([[1,1,2],[2,3,4],[1,8,9],[3,7,8]]) #各分类的数据
print(data[lable == 'a']) #索引a类的数据
结果为
[[1 1 2]
[3 7 8]]
对于普通转置,可以直接使用T(注意大小写敏感)
改变维度使用reshape
对于高维数组,可以使用transpose(输入所有轴编号的元组)和swapaxes(输入一对轴编号)来进行变形
import numpy as np
arr = np.arange(30).reshape((2,3,5)) #创建2*3*5数组
re3d_arr = arr.transpose((2,0,1)) '''将原排序为(0,1,2)的轴改为(2,0,1),理
解为改成5*2*3数组'''
tr3d_arr = arr.swapaxes(1,2) #将1,2两轴交换,即改成2*5*3数组
print('{0}\n{1}\n{2}'.format(arr,re3d_arr,tr3d_arr))
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]][[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]]
[[[ 0 5 10]
[15 20 25]][[ 1 6 11]
[16 21 26]][[ 2 7 12]
[17 22 27]][[ 3 8 13]
[18 23 28]][[ 4 9 14]
[19 24 29]]]
[[[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]][[15 20 25]
[16 21 26]
[17 22 27]
[18 23 28]
[19 24 29]]]
贴点图吧,都挺好理解的,直接调用就行
需要注意的是,这些函数都是按照标量的规则进行运算,近似相当于matlab中的加点运算,而不是进行矩阵运算。
resul = np.where(condition,xarray,yarray)
实现当满足condition时,选取xarray的值,否则选取yarray的值的功能,以下例子实现了保留正数,将非负数置0的功能
import numpy as np
arr = np.arange(-5,7,1).reshape((3,4))
result = np.where(arr>0,arr,0)
print(arr)
print(result)
[[-5 -4 -3 -2]
[-1 0 1 2]
[ 3 4 5 6]]
[[0 0 0 0]
[0 0 1 2]
[3 4 5 6]]
其中mean、sum等函数可以输入一个axis选项参数,用于该轴向上的值,比如np.mean(0)为每列的平均值
import numpy as np
arr = np.arange(-5,5,1).reshape((2,5))
print(arr)
print(arr.mean(0))
print(arr.mean(1))
[[-5 -4 -3 -2 -1]
[ 0 1 2 3 4]]
[-2.5 -1.5 -0.5 0.5 1.5]
[-3. 2.]
直接调用np.sort,同样也可以添加参数来针对某一轴向来进行排序
numpy.linalg中有一组标准的矩阵运算