【Python】变换ndarry的状态
1. 设置ndarry形状
(1) reshape
import numpy as np
arr = np.arange(12) #创建一维ndarray
print(arr)
arr1 = arr.reshape(3,4) #设置ndarry的维度
print(arr1)
![reshape](https://i.loli.net/2021/03/31/eSjHLmvMzi8TVAB.png)
(2) resize
arr.resize(2,6)
print(arr)
![resize](https://i.loli.net/2021/03/31/Q2I6X5kLYwZRCjU.png)
(3) shape
arr.shape = (3,4)
print(arr)
![shape](https://i.loli.net/2021/03/31/SdCu3pJmEVkr864.png)
2. 展平ndarry
(1) ravel
arr=np.arange(12).reshape(3,4) #创建二维ndarray
print(arr)
print(arr.ravel())
![ravel](https://i.loli.net/2021/03/31/9ytMqvND1nhsjWw.png)
(2) flatten
print(arr.flatten()) #横向展开
print(arr.flatten('F')) #纵向展开
![flatten](https://i.loli.net/2021/03/31/1BFsxfcghG7i8De.png)
3. 组合ndarry
(1) hstack
arr1 = np.arange(12).reshape(3,4)
print(arr1)
arr2 = arr1*3
print(arr2)
print(np.hstack((arr1,arr2))) #横向组合
![hstack](https://i.loli.net/2021/03/31/qjfbZMoNPHxwgYW.png)
(2) vstack
print(np.vstack((arr1,arr2))) #纵向组合
![vstack](https://i.loli.net/2021/03/31/GJkK1ptINWU9ZLf.png)
(3) concatenate
concatenate函数既能实现横向组合,又能巩固实现纵向组合。
当参数axis=1时为横向组合,当参数axis=0时为纵向组合。
print(np.concatenate((arr1,arr2),axis=1)) #横向组合
print(np.concatenate((arr1,arr2),axis=0)) #纵向组合
![concatenate](https://i.loli.net/2021/03/31/XiaIl43epWbc7dP.png)
(4) dstack 深度组合
即对一系列ndarry沿着纵轴方向进行层叠组合,类型于Python的内置函数zip
print(np.dstack((arr1,arr2)))
arr3 = []
for x,y in list(zip(arr1,arr2)):
arr3.append(list(zip(x,y)))
arr3 = np.array(arr3)
print(arr3 == np.dstack((arr1,arr2)))
![dstack 深度组合](https://i.loli.net/2021/03/31/N3ohHMS9z1CvPZn.png)
4. 分割ndarray
(1) hsplit
横向分割
(2) vsplit
纵向分割
(3) split
split函数也可以实现横合和纵向分割。
当参数axis=1时为横向分割,当参数axis=0时为纵向分割。
(4) dsplit 深度分割
使用dsplit函数可以实现ndarry的深度分割,但被分割的ndarry必须是三维ndarry,且分割的数目必须为shape属性中下标为2的值的公约数。
arr = np.arange(12).reshape(2,2,3)
print(arr)
print(np.dsplit(arr,3))
![dsplit 深度分割](https://i.loli.net/2021/03/31/jG4Yans5f79bCUl.png)