我有一个名为resultsten
的多维数组,其形状如下
print np.shape(resultsten)
(3, 3, 6, 10, 1, 9)
在某些情况下,我在名为cleanup
的程序中使用此数组的一部分,然后将此数组分为x
,y
和z
阵列:
x,y,z = cleanup(resultsten[0,:,:,:,:,:])
def cleanup(resultsmat):
x = resultsmat[:,:,:,:,2]
y = resultsmat[:,:,:,:,1]
z = resultsmat[:,:,:,:,4]
return x,y,z
但是,我也可能不希望将resultsten
的整个矩阵放在我的程序cleanup
中,因此:
x,y,z = cleanup(resultsten[0,0,:,:,:,:])
这当然会给出错误,因为cleanup
的索引与预期的索引不匹配。
我想知道切片中是否可以包含可变数量的尺寸。
我想知道一个命令,它会获取每个维度的所有条目,直到最后一个维度,只需要一个索引。
我已经看到除了第一个之外的所有维度都可以这样做,例如
resultsten[1,:,:,:,:,:]
给出与以下相同的结果:
resultsten[1,:]
我试过了:
resultsten[:,1]
但它没有提供所需的结果,Python解释如下:
resultsten[:,1,:,:,:,:]
MWE:
def cleanup(resultsmat):
x = resultsmat[:,:,:,0,2]
y = resultsmat[:,:,:,0,1]
z = resultsmat[:,:,:,0,4]
return x,y,z
resultsten=np.arange(3*3*6*10*1*9).reshape(3,3,6,10,1,9)
x0,y0,z0 = cleanup(resultsten[0,:,:,:,:,:]) #works
x0,y0,z0 = cleanup(resultsten[0,0,:,:,:,:]) #does not work
答案 0 :(得分:0)
我会使用切片对象列表:
import numpy as np
A = np.arange(2*3*4*5).reshape(2,3,4,5)
#[:] <-> [slice(None,None, None)]
sliceList = [slice(None, None, None)]*(len(A.shape)-1)
a,b,c,d,e = [A[sliceList+[i]] for i in range(A.shape[-1])]
输出:
>>> A[:,:,:,0]
array([[[ 0, 5, 10, 15],
[ 20, 25, 30, 35],
[ 40, 45, 50, 55]],
[[ 60, 65, 70, 75],
[ 80, 85, 90, 95],
[100, 105, 110, 115]]])
>>> a
array([[[ 0, 5, 10, 15],
[ 20, 25, 30, 35],
[ 40, 45, 50, 55]],
[[ 60, 65, 70, 75],
[ 80, 85, 90, 95],
[100, 105, 110, 115]]])