Python之Numpy(3)

这篇博客介绍了NumPy中数组的合并与分割操作,包括垂直堆叠`vstack`、水平堆叠`hstack`、`concatenate`函数以及`split`函数的使用。此外,还讲解了数组的深浅拷贝概念,通过`copy()`实现独立副本以避免数据共享导致的意外修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 array合并

(1)左右合并以及上下合并 

import numpy as np
a=np.array([1,1,1])
b=np.array([2,2,2])
c=np.vstack((a,b)) #verticle stack 上下合并 可以a,a,b,b,a重复合并
print(c)
print(a.shape,c.shape) #运行结果:(3,) (2, 3)
d=np.hstack((a,b)) #horizontal stack 左右合并
print(d)
print(a.T) #结果还是[1 1 1] 说明不能用transpose或者T方法将其转置
print(a[np.newaxis,:].shape)#在行上加了个维度 把[1 1 1]变为[[1 1 1]] 是个1*3的矩阵
print(a[:,np.newaxis]) #在列上增加维度
# 结果
# [[1]
# [1]
# [1]]

运行结果:

D:\PycharmProjects\pythonProject\venv\Scripts\python.exe D:/PycharmProjects/pythonProject/hello.py
[[1 1 1]
 [2 2 2]]
(3,) (2, 3)
[1 1 1 2 2 2]
[1 1 1]
(1, 3)
[[1]
 [1]
 [1]]

Process finished with exit code 0

也可以这样定义:

a=np.array([1,1,1])[np.newaxis,:] #在行上加个维度
print(a) #运行结果:[[1 1 1]]

(2) 另一个函数可以随意指定行Or列的合并

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,a),axis=1) #行合并
print(c)

运行结果:

D:\PycharmProjects\pythonProject\venv\Scripts\python.exe D:/PycharmProjects/pythonProject/hello.py
[[1 2 2 1 1]
 [1 2 2 1 1]
 [1 2 2 1 1]]

Process finished with exit code 0

2 array分割

import numpy as np
a=np.arange(12).reshape((3,4))
print(a)
#等量分割
print(np.split(a,2,axis=1))#将a分成2块 横向分割 分成左右两块
print(np.split(a,3,axis=0))#将a分成3块 上中下三行
print(np.vsplit(a,3))#纵向分割三块
print(np.hsplit(a,2))#横向分成两块

#不等量分割
print(np.array_split(a,3,axis=1)) #当4个不能等量分成3个部分时 考虑不等量分割 2+1+1

运行结果:

D:\PycharmProjects\pythonProject\venv\Scripts\python.exe D:/PycharmProjects/pythonProject/hello.py
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

Process finished with exit code 0

 3 copy与deep copy

import numpy as np
a=np.arange(4)
print(a)
b=a
c=a
d=b
a[0]=0.3
print(a) #结果还是[0 1 2 3] 因为默认为整型
a[0]=11
print(a)
print(b is a) #判断b是不是a true 改变a也会改变b当中的东西
print(b)
print(c)
print(d is a)#true
d[2:4]=[22,33]
print(d)
print(a,b,c)#abcd的值全部一起改变了

#如果只是想用到值 不想将他们关联在一起的话
b=a.copy()#deep copy 只是把值copy过去 并没有关联

 运行结果:
 

D:\PycharmProjects\pythonProject\venv\Scripts\python.exe D:/PycharmProjects/pythonProject/hello.py
[0 1 2 3]
[0 1 2 3]
[11  1  2  3]
True
[11  1  2  3]
[11  1  2  3]
True
[11  1 22 33]
[11  1 22 33] [11  1 22 33] [11  1 22 33]

Process finished with exit code 0

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值