数组转置
import numpy as np
a = np.arange(12).reshape(4,3)
print(a)
print(a.T)
print(np.transpose(a))
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[ 0 3 6 9]
[ 1 4 7 10]
[ 2 5 8 11]]
[[ 0 3 6 9]
[ 1 4 7 10]
[ 2 5 8 11]]
转动轴
rollaxis(arr, axis, start=0)转动数组arr的axis轴到start前面。如rollaxis(arr,2,0)即arr[轴0][轴1][轴2]变成
arr[轴1][轴2][轴0],即arr[0][0][0]变成arr[0][0][0],arr[0][0][1]变成arr[0][1][0],arr[0][1][0]变成arr[1][0][0],以此类推。
a = np.arange(8).reshape(2,2,2)
print ('原数组:')
print (a)
# 将轴 2 滚动到轴 0
print ('调用 rollaxis 函数:')
print (np.rollaxis(a,2)) #等价于np.rollaxis(a,2,0)
原数组:
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
调用 rollaxis 函数:
[[[0 2]
[4 6]]
[[1 3]
[5 7]]]
在指定位置插入轴
np.expand_dims(arr, axis).在arr的axis新插入一个轴,如arr是一个2,3数组,在axis=0插入轴,则变成1,2,3.在axis=1插入轴则变成2,1,3.
import numpy as np
a = np.arange(6),reshape(2,3)
print(a)
b = np.expand_dims(a,axis=0)#b的shape是(1,2,3)
print(b)
c = np.expand_dims(a,axis=1)#c的shape是(2,1,3)
print(c)
[[0 1 2]
[3 4 5]]
[[[0 1 2]
[3 4 5]]]
[[[0 1 2]]
[[3 4 5]]]
数组连接
np.concatenate((a1, a2, …),axis),按照axis轴连接数据a1,a2…
如一个(2,2)数组和一个(1,2)数组在axis=0轴连接,变成一个(3,2)数组。
一个(2,2)数组和一个(2,1)数组在axis=1轴连接,变成一个(2,3)数组。
可以看出拼接的数据之间要求:在拼接的维度axis可以不同,在其他维度必须相同。
import numpy as np
a = np.array([[1,2],[3,4]],dtype=int)#a.shape=(2,2)
b = np.array([[5,6]],dtype=int) #b.shape=(1,2)
c = np.array([[5],[6]],dtype=int)#c.shape=(2,1)
d = np.concatenate([a,b],axis=0)#d.shape=(2+1,2)
print(d)
e = np.concatenate([a,c],axis=1)#e.shape=(2,2+1)
print(e)
[[1 2]
[3 4]
[5 6]]
[[1 2 5]
[3 4 6]]
#数组堆叠
np.stack(arrays, axis=0)按指定axis轴堆叠数组
进行stack的两个数组必须有相同的形状,同时,输出的结果的维度是比输入的数组都要多一维的.
np.stack([a,b], axis=0) 假如a.shape=b.shape=(2,3)
过程:1将进行stack的数组a,b,在指定的axis增加一个维度,a.shape=b.shape=(1,2,3).
2将增加维度后的a,b两个数组在指定的axis进行concatenate。
import numpy as np
a = np.array([1,2,3]),dtype=int)
b = np.array([2,3,4]),dtype=int)
print(np.stack([a,b],axis=1)
#等价于
a = a[:,np.newaxis]
b = b[:,np.newaxis]
print(np.concatenate([a,b],axis=1))
[[1 2]
[2 3]
[3 4]]
#二维数组
a = np.array([[1,2,3]],dtype=int)
b = np.array([[2,3,4]],dtype=int)
print(np.stack([a,b],axis=0))
#等价于
a = a[np.newaxis,:,:]
b = b[np.newaxis,:,:]
print(np.concatenate([a,b],axis=0))
[[[1 2 3]]
[[2 3 4]]]
[[[1 2 3]]
[[2 3 4]]]
vstack
如果堆叠的数组都是大于1维。则np.vstack([a,b]) = np.concatenate([a,b],axis=0)
import numpy as np
#二维及以上数组
a=[[1,2],[3,4]]
b=[[7,8],[9,10]]
print(np.vstack([a,b]))
print(np.concatenate([a,b],axis=0))
[[ 1 2]
[ 3 4]
[ 7 8]
[ 9 10]]
[[ 1 2]
[ 3 4]
[ 7 8]
[ 9 10]]
#一维数组
a = [1,2,3]
b = [4,5,6]
print(np.vstack([a,b]))
[[1 2 3]
[4 5 6]]
hstack
同理
如果堆叠的数组都大于1维,则np.hstack([a,b]) = np.concatenate([a,b],axis=1)
分隔数组
np.split(arr,indices_or_sections,axis)
indices_or_sections:如果是整数,则arr按照axis轴方向除以indices_or_sections,平均分成几份,如果是数组,则表示r按照axis轴要分隔的下标
import numpy as np
#一维数组
a = np.arange(10,dtype=int)
b = np.split(a,2)
print(b)
c = np.split(a,[3,5])
print(c)
#[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])]
#[array([0, 1, 2]), array([3, 4]), array([5, 6, 7, 8, 9])]
#二维数组
a = np.arange(8).reshape(2,4)
b = np.split(a,2,axis=1)
print(b)
#[[0 1 2 3]
# [4 5 6 7]]
#[array([[0, 1],
# [4, 5]]), array([[2, 3],
# [6, 7]])]
c = np.split(a,[1,2],axis=1)
print(c)
#[[0 1 2 3]
# [4 5 6 7]]
#[array([[0],
# [4]]), array([[1],
# [5]]), array([[2, 3],
# [6, 7]])]
np.vsplit()
np.vsplit(arr) = np.split(arr,axis=0)
np.hsplit()
np.hsplit(arr) = np.split(arr,axis=1)
引用
https://www.runoob.com
numpy中的hstack()、vstack()、stack()、concatenate()函数详解
关于numy中np.expand_dims方法的理解