【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)

(2) resize
arr.resize(2,6)
print(arr)

(3) shape
arr.shape = (3,4)
print(arr)

2. 展平ndarry
(1) ravel
arr=np.arange(12).reshape(3,4) #创建二维ndarray
print(arr)
print(arr.ravel())

(2) flatten
print(arr.flatten()) #横向展开
print(arr.flatten('F')) #纵向展开

3. 组合ndarry
(1) hstack
arr1 = np.arange(12).reshape(3,4)
print(arr1)
arr2 = arr1*3
print(arr2)
print(np.hstack((arr1,arr2))) #横向组合

(2) vstack
print(np.vstack((arr1,arr2))) #纵向组合

(3) concatenate
concatenate函数既能实现横向组合,又能巩固实现纵向组合。
当参数axis=1时为横向组合,当参数axis=0时为纵向组合。
print(np.concatenate((arr1,arr2),axis=1)) #横向组合
print(np.concatenate((arr1,arr2),axis=0)) #纵向组合

(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)))

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))
