Python数据分析入门 - Numpy(2)
程序员文章站
2024-01-19 14:54:28
...
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