欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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