NumPy’s main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers. In NumPy dimensions are called axes. The number of axes is rank.
一、Numpy 属性
import numpy as np
array=np.array([[1,2,3],[2,3,4]]) #矩阵创建
print(array)
print('number of dim:',array.ndim); # 矩阵的秩
print('shape:',array.shape); # 返回行列
print('size',array.size); # 元素个数
c=np.linspace(1, 10, 6).reshape(2,3) #生成一个六段数列
print(c)
[[1 2 3]
[2 3 4]]
number of dim: 2
shape: (2, 3)
size 6
float64
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
二、Numpy 基本运算
a=np.array([20,30,40,50])
b=np.arange(4) # + -运算
c=a-b
print(b)
print(a<35) #BASIC OPERATION BOOL 布尔运算
print(c)
A=np.array([[1,1],[0,1]])
B=np.array([[2,0],[3,4]])
print(A*B) #矩阵元素之间的乘法
print(A.dot(B)) #矩阵乘法
a=np.random.random((2,3))
print(a.sum()) # 所有元素之和
print(a.min()) #a的最小值
print(a.max()) #a的最大值
[0 1 2 3]
[ True True False False]
[20 29 38 47]
[[2 0]
[0 4]]
[[5 4]
[3 4]]
[[ 0.5883172 0.02955175 0.50156931]
[ 0.22681799 0.36697874 0.23228919]]
1.94552418211
0.0295517549633
0.58831720019
三、Numpy 索引运算
A=np.arange(3,15).reshape(3,4)
print(A)
print(A[2]) #索引行数
print(A[1][1]) #第二行第而列
print(A[2,1]) #第三行第二列
print(A[2,:]) #第三行所有数
print(A[1,1:3]) #第二行 第2-3列
A=np.arange(3,15).reshape(3,4)
for row in A: #迭代每一行
print(row)
for column in A.T: #迭代原矩阵的列
print(column)
for item in A.flat:
print(item)
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
8
12
[11 12 13 14]
[8 9]
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
3
4
5
6
7
8
9
10
11
12
13
14
四、Numpy 合并运算
A=np.array([1,1,1])
B=np.array([2,2,2])
c=np.vstack((A,B)) #进行一个上下的合并
d=np.hstack((A,B)) #进行一个左右的合并
print(c)
print(d)
print(A.shape,c.shape) #打印行列出来
print(A.shape,d.shape)
print(A.T) #转制后仍然一样
A=np.array([1,1,1])
B=np.array([2,2,2])
print(A[np.newaxis,:].shape)# 横向增加一个维度
print(A[:,np.newaxis].shape) #纵向增加一个维度
A=A[:,np.newaxis]#通过纵向增加一个维度使得变成纵向向量
print(A)
B=B[:,np.newaxis]
print(B)
A=np.array([1,1,1])[:,np.newaxis]
B=np.array([2,2,2])[:,np.newaxis]
c=np.concatenate((A,B,B,A),axis=0) #纵向合并
print(c)
c=np.concatenate((A,B,B,A),axis=1) #横向合并
print(c)
[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
(3,) (2, 3)
(3,) (6,)
[1 1 1]
(1, 3)
(3, 1)
[[1]
[1]
[1]]
[[2]
[2]
[2]]
[[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]
[1]
[1]
[1]]
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
五、Numpy 分割运算
A=np.arange(12).reshape(3,4)
print(A)
print(np.split(A,3,axis=0))#横向分割三块
print(np.split(A,2,axis=1))#横向分割三块
print(np.array_split(A,3,axis=1))#不等分割
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
五、Numpy 复制
存在一些情况,在改变一些矩阵而不需要改变关联矩阵值的情况下,需要用到复制。
a=np.arange(4)
b=a
c=a
print(a)
a[0]=11
print(a)
print(b)
print(c)
a=np.arange(4)
b=a.copy()
a[0]=11
print(a)
print(b)
[0 1 2 3]
[11 1 2 3]
[11 1 2 3]
[11 1 2 3]
[11 1 2 3]
[11 1 2 3]
[0 1 2 3]