1 Ndarray的创建和属性
import numpy as np
array = np.array([[1,2,3],[2,3,4]]) ##创建2行3列的数组,默认dtype是int32
>>> print(array)
[[1 2 3]
[2 3 4]]
>>> type(array)
<class 'numpy.ndarray'>
>>> array
array([[1, 2, 3],
[2, 3, 4]])
>>> array.shape ##数组的几行及列
(2, 3)
>>> array.ndim ##数组的维数
2
>>> array.size
6
>>> array.dtype
dtype('int32')
>>>
2 常用函数
>>> a = np.zeros((3,4)) ##生成3行4列的0矩阵
>>> a
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> b = np.ones((2,3)) ##生成3行4列的1矩阵
>>> b
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> d = np.arange(10,20,2)
>>> d
array([10, 12, 14, 16, 18])
>>>
>>> e = np.arange(12).reshape((3,4))
>>> e
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> f = np.linspace(1,10,5) ##1到10,中间有5个元素,所以步长是2.25
>>> f
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
>>> a = np.random.random((2,4))
>>> a
array([[ 0.85593882, 0.78012135, 0.50869311, 0.22364149],
[ 0.55964717, 0.14178502, 0.74792457, 0.40231654]])
>>> np.sum(a) ###np.sum(a,axis = 1)可以使用axis=1是行,0是列
4.2200680671188735
>>> np.min(a)
0.14178501726064763
>>> np.max(a)
0.85593881805940963
>>> a = np.arange(2,14).reshape((3,4))
>>> a
array([[ 2, 3, 4, 5],
[ 6, 7, 8, 9],
[10, 11, 12, 13]])
>>> np.argmin(a) ###返回最小值的索引
0
>>> np.argmax(a)
11
>>> np.argmax(a,axis = 0)
array([2, 2, 2, 2], dtype=int64)
>>> np.mean(a) ###平均值,或者采用a.mean()
7.5
>>> a.cumsum() ###累加值
array([ 2, 5, 9, 14, 20, 27, 35, 44, 54, 65, 77, 90], dtype=int32)
>>> np.diff(a) ###差分
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
>>> a.nonzero() ##查找数组中的0值的位置
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
>>> a.sort() ###逐行进行排序
>>> a
array([[ 2, 3, 4, 5],
[ 6, 7, 8, 9],
[10, 11, 12, 13]])
>>> a.transpose() ###a的转置
array([[ 2, 6, 10],
[ 3, 7, 11],
[ 4, 8, 12],
[ 5, 9, 13]])
>>> a.clip(5,9) ##小于5的数是5,大于9的数是9,中间的数不变
array([[5, 5, 5, 5],
[6, 7, 8, 9],
[9, 9, 9, 9]])
3 基本运算
>>> a = np.array([10,20,30,40])
>>> b = np.arange(4)
>>> a
array([ 10, 2030, 40])
>>> b
array([0, 1, 2, 3])
>>> b>3
array([False, False, False, False], dtype=bool)
>>> c = a*b ##数组对应元素逐个相乘
>>> c
array([ 0, 20, 60, 120])
>>> d = np.dot(a,b) ##矩阵乘法或者可以使用a.dot(b)
>>> d
200
4 矩阵的索引
>>> a
array([[ 2, 3, 4, 5],
[ 6, 7, 8, 9],
[10, 11, 12, 13]])
>>> a[2][0] ##索引单个 也可以使用a[2,0]
10
>>> a[2] ##索引第二行 或者使用a[2,:], a[:,1]表示第一列所有数
array([10, 11, 12, 13])
>>> a[2,1:3] ##第2行的第1到3列()不包含第三列
array([11, 12])
>>> for row in a: ###迭代每一行
print(row)
[2 3 4 5]
[6 7 8 9]
[10 11 12 13]
>>> for column in a.T: ##迭代每一列
print(column)
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
>>> for item in a.flat: ###遍历每一个元素
print(item)
2
3
4
5
6
7
8
9
10
11
12
13
>>> col,row = a.shape
>>> for i in range(col): ##另一种每个元素迭代的方法
for j in range(row):
print(a[i,j])
2
3
4
5
6
7
8
9
10
11
12
13
5 矩阵合并和分割
>>> a = np.array([1,1,1])
>>> b = np.array([2,2,2])
>>> np.vstack((a,b)) ###数组的上下合并
array([[1, 1, 1],
[2, 2, 2]])
>>> np.hstack((a,b)) ##数组的左右合并
array([1, 1, 1, 2, 2, 2])
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> np.split(a,2, axis = 1) ##将数组分割成2个数组,按照列来分割成2块
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
>>> np.split(a,3, axis=0) ##将数组分割成3个行数组
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
>>> np.array_split(a,3, axis = 1)###不等分割
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
>>> np.vsplit(a,3) ###纵向分割
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
>>> np.hsplit(a,2) ###横向分割
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
其实还有更加简单的分割方法:直接利用索引就能分割出来
>>> b = a[0:1,:]
>>> b
array([[0, 1, 2, 3]])
>>> b
array([[0, 1, 2, 3]])
>>> b = a[1:3,:]
>>> b
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
如果是直接赋值操作,那么数组是一样的,指向一个地址,如果想深度copy的话,需要使用b = a.copy()操作,这样的话b和a就是一个全新的矩阵