Array
创建矩阵:
import numpy as np
Array1 = np.array([1,2,3]) #创建一维矩阵
Array2 = np.array([[4,5,6],[7,8,9]]) #创建二维矩阵
特殊矩阵的创建:
import numpy as np
a = np.zeros((2,2)) #创建一个零矩阵
b = np.ones((2,2)) #创建所有元素为1的矩阵
c = np.full((3,3),8) #创建一个矩阵,元素使用指定的常量进行填充
d = np.eye((2)) #创建一个单位矩阵
e = np.random.random((2,2)) #创建一个随机数填充的矩阵
Array indexing
Slice
import numpy as np
Array = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
#Array:
#[[1,2,3,4]
#[5,6,7,8]
#[9,10,11,12]]
b = Array[:2,1:3] #前两行,1-2列
#b:
#[[2,3]
#[6,7]]
#修改slice获取的矩阵将导致原矩阵修改,但是需要注意索引的对应关系
b[0,0] = 99 #现在Array[0,1]也变成99
使用整型索引和Slice时将会导致矩阵降秩:
import numpy as np
Array = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
#Array:
#[[1,2,3,4]
#[5,6,7,8]
#[9,10,11,12]]
b = Array[1:2,1:3] #b是一个1x2的矩阵
#b:[[6],[3]]
c = Array[1,1:3] #c是一个含有两个元素的行向量
#c:[6,7]
整型索引
import numpy as np
Array = np.array([[1,2],[3,4],[5,6]])
#Array:
#[[1,2]
#[3,4]
#[5,6]]
b = Array[[0,1,2],[0,1,0]] #b:[1,4,5]
c = np.array(Array[[0,1,2],[0,1,0]]) #c:[1,4,5]
d = Array[[0,0],[1,1]] #d:[2,2]
e = np.array(Array[[0,0],[1,1]]) #e:[2,2]
从每行选取一个数据的快速实现方式:
import numpy as np
Array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
#Array:
#[[1,2,3]
#[4,5,6]
#[7,8,9]
#[10,11,12]]
b = np.array([0,2,0,1])
d = np.array(Array[np.arange(4),b]) #d:[1,6,7,11]
DateTypes
import numpy as np
x = np.array([1,2])
print(x.dtype) #int32
y = np.array([1.0,2.0])
print(y.dtype) #float32
z= np.array([1,2],dtype=np.int64)
print(z.dtype) #int64
Array math
对应元素之间的运算:
import numpy as np
x = np.array([[1,2],[3,4]],dtype=np.int64)
y = np.array([[5,6],[7,8]],dtype=np.int64)
z1 = np.add(x,y) #等价于x+y,对应元素相加
z2 = np.subtract(x,y) #等价于x-y,对应元素相减
z3 = np.multiply(x,y) #等价于x*y,对应元素相乘
z4 = np.divide(x,y) #等价于x/y,对应元素相除
z5 = np.sqrt(x) #开平方操作
矩阵相乘:
import numpy as np
x = np.array([[1,2],[3,4]],dtype=np.int64)
y = np.array([[5,6],[7,8]],dtype=np.int64)
v = np.array([9,10])
w = np.array([11,12])
#向量内积
z1 = np.dot(v,w) #等价于v.dot(w)
#向量和矩阵之间的内积,结果是一维的
z2 = np.dot(x,v) #等价于x.dot(v),z2:[29 67]
#矩阵相乘
z3 = np.dot(x,y)
sum计算:
import numpy as np
x = np.array([[1,2],[3,4]])
sum1 = np.sum(x) #sum1 = 10
sumx = np.sum(x,axis=1) #axis = 1 表示行,sumx:[3 7]
sumy = np.sum(x,axis=0) #axis = 0 表示列,sumx:[4 6]
转置:
import numpy as np
x = np.array([[1,2],[3,4]])
y = x.T
#一维矩阵转置没有效果
v = np.array([1,2,3])
w = v.T #w还是[1,2,3]
Broadcasting
import numpy as np
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
v = np.array([1,0,1])
z = x + v
#z:
#[[ 2 2 4]
# [ 5 5 7]
#[ 8 8 10]
#[11 11 13]]
#矩阵加上一个常数
x = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
y = 5
z2 = x+y
#z2:
#[[ 6 7 8]
# [ 9 10 11]
# [12 13 14]
# [15 16 17]]