array合并、分割

合并包括行、列等合并操作

  • 上下合并
A = np.array([1,1,1])
B = np.array([2,2,2])
    
print(np.vstack((A,B))) #vertical stack

然后我们来看一下ndarray数组对象的尺度(.shape)

A = np.array([1,1,1])
B = np.array([2,2,2])

C = np.vstack((A,B))
print(A.shape,C.shape)

运行结果:

(3,) (2,3)
  • 左右合并
A = np.array([1,1,1])
B = np.array([2,2,2])

C = np.vstack((A,B))
D = np.hstack((A,B)) # horizontal stack
print(D)
print(A.shape,D.shape)

运行结果:

[1 1 1 2 2 2]
(3,) (6,)
  • 添加、改变维度:
A = np.array([1,1,1])
B = np.array([2,2,2])

C = np.vstack((A,B))
D = np.hstack((A,B)) # horizontal stack

print(A[:,np.newaxis].shape) #纵向
print(A[np.newaxis,:].shape) #横向
  • 合并方法.concatenate()
A = np.array([1,1,1])
B = np.array([2,2,2])
# axis属性决定横、纵向合并 0:纵向 1:横向
C = np.cancatenate((A,B,B,A,B),axis=0)
  • ndarray分割.split()
    • 等量分割
    • 不等量分割
A = np.arange(12).reshape((3,4))

print(np.split(A,4,axis=1))
[array([[0],
       [4],
       [8]]), array([[1],
       [5],
       [9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
A = np.arange(12).reshape((3,4))

print(np.array_split(A,3,axis=1))
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

和合并类似,分割也有单独出来的横纵向分割 .vsplit() .hsplit()

numpy数组的copy

先来看一个示例

a = np.arange(4)
b = a
c = a
d = b
print(a)
print(b)
[0 1 2 3] 
[0 1 2 3] 

然后我们改变a的值

a = np.arange(4)
b = a
c = a
d = b

a[0] = 11 #这里注意类型确定之后,改变的值数据类型也会改变,例如:a[0] = 0.1 打印出来之后 a[0] 依旧是0

print(a)
print(b)
[11  1  2  3]
[11  1  2  3]

可以看出当b=a时,b是指向a的地址,而不是等于a的值,所以b是可变的 同理这里的d is a 也是 True 如果改变b或d,a也会变。 如果想等于a的值而不指向a的地址的话,就要用到.copy(),深度的copy。

a = np.arange(4)
b = a
c = a
d = b

b = a.copy() #deep copy