①创建行向量
# 方法一
a1 = np.array([[1, 2, 3, 4]])
print(a1.shape)
# >> (1, 4)
# 方法二
a2 = np.array([[1, 2, 3, 4]]).reshape(1, -1)
print(a2.shape)
# >> (1, 4)
②创建列向量
# 方法一
b1 = np.array([[5], [6], [7], [8]])
print(b1.shape)
# >> (4, 1)
# 方法二
b2 = np.array([[5, 6, 7, 8]]).reshape(-1, 1)
print(b2.shape)
# >> (4, 1)
# 方法三
b3 = np.array([[5, 6, 7, 8]]).T
print(b3.shape)
# >> (4, 1)
注意:以下这种方法严格上来说是不能用作行向量的。在做合并向量时,按照行来合并还勉强可以,但是按做列进行合并就会报错。在上述的方法则不会有问题
c1 = np.array([1, 3, 5, 7])
c2 = np.array([2, 4, 6, 8])
print(np.concatenate([c1, c2], axis=0))
# 报错:print(np.concatenate([c1, c2], axis=1))
③创建自定义矩阵
# 方法一
A1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(A1)
# 方法二
A2 = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
print(A2)
# 方法三
A3 = np.mat([[1, 2, 3, 4], [5, 6, 7, 8]])
print(A3)
mat 和 matrix 区别
mat: 如果输入的本身就是一个矩阵,则mat方法是对原始矩阵的一个引用,不是copy。
修改B2,导致了B1也会改变.
mat 等价 np.matrix(data, copy = False)
matrix默认是np.matrix(data, copy = True)
B1 = np.array([[1, 2, 3, 4]])
B2 = np.mat(B1)
B2[0, 0] = 0
print(B1)
# >>[[0 2 3 4]]
matrix 和 array 区别
# 做矩阵乘法时
C1 = np.array([[1, 3, 5, 7]]).reshape(-1, 1)
C2 = np.array([[2, 4, 6, 8]]).reshape(1, -1)
# 需要使用dot方法
print(np.dot(C1, C2))
C3 = np.matrix([[1, 3, 5, 7]]).reshape(-1, 1)
C4 = np.matrix([[2, 4, 6, 8]]).reshape(1, -1)
# 直接乘即可
print(C3*C4)
# 其他方法的使用也有不同,使用array还是matrix自己选择。
④创建全0矩阵
D = np.zeros((4, 4))
print(D)
⑤创建全1矩阵
E = np.ones((3, 4))
print(E)
⑥创建空矩阵(不是零矩阵哦!)
# 这个0表示的是任意列
F = np.empty((4, 0))
# T为4*1矩阵
T = np.array([[1, 2, 3, 4]]).T
# 按照列的方式进行合并,结果为还是一列,即为T矩阵,表明F确实是空的。没有多出一列。
print(np.concatenate([F, T], axis=1))
空矩阵能够做什么呢?
如果我们有n个矩阵,不能手动一个一个合并的时候。我们对它们进行合并,需要调用for循环来处理
X1 = np.array([[1, 2, 3, 4]])
X2 = np.array([[2, 3, 4, 5]])
X3 = np.array([[3, 4, 5, 6]])
Xn = np.array([[4, 5, 6, 7]])
X = [X1, X2, X3, Xn]
# 创建一个 n行4列 的空矩阵是for循环能够有起始矩阵
Empty_Matrix = np.empty((4, 0)).T
for i in range(4):
Empty_Matrix = np.concatenate([Empty_Matrix, X[i]], axis=0)
print(Empty_Matrix)
输出:
[[1. 2. 3. 4.]
[2. 3. 4. 5.]
[3. 4. 5. 6.]
[4. 5. 6. 7.]]