1、合并
np.vstack() 上下合并
import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])
print(np.vstack((A,B))) # vertical stack
"""
[[1,1,1]
[2,2,2]]
"""
C = np.vstack((A,B))
print(A.shape,C.shape)
# (3,) (2,3)
np.hstack() 左右合并
D = np.hstack((A,B)) # horizontal stack
print(D)
# [1,1,1,2,2,2]
print(A.shape,D.shape)
# (3,) (6,)
np.newaxis() 转置的另外一种方式
前面使用过用A.T来表示A的转置,下面介绍一种新的转置方法。
print(A[np.newaxis,:]) #以行为标准
# [[1 1 1]]
print(A[np.newaxis,:].shape)
# (1,3)
print(A[:,np.newaxis]) #以列为标准
"""
[[1]
[1]
[1]]
"""
print(A[:,np.newaxis].shape)
# (3,1)
np.concatenate()
当你的合并操作需要针对多个矩阵或序列时,借助concatenate
函数可能会让你使用起来比前述的函数更加方便:
import numpy as np
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) # axis=0表示纵向合并
print(C)
"""
[[1]
[1]
[1]
[2]
[2]
[2]
[2]
[2]
[2]
[1]
[1]
[1]]
"""
D = np.concatenate((A,B,B,A),axis=1) #表示横向合并
print(D)
"""
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]
"""
concatenate函数通过参数axis的值来很好的控制纵横的合并。对于多矩阵的操作十分的方便。
2、分割
纵向分割
import numpy as np
A = np.arange(12).reshape((3, 4))
"""
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
"""
print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
"""
横向分割
print(np.split(A, 3, axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
在Numpy里还有np.vsplit()
与np.hsplit()
方式可用。vertical可理解为垂直方向的操作,horizontal可理解为水平方向的操作。注意:也必须为等量分割。
print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
"""
不等量分割
上述均为等量分割,若为不等量时,如下:
print(np.array_split(A, 3, axis=1))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
"""
学到这里,我们对Numpy已有了大致的了解,对矩阵的简单操作了如执掌。