2014-06-30 96 views
0

我有多维数组的变量称为resultsten,具有以下形状在切片尺寸

print np.shape(resultsten) 
(3, 3, 6, 10, 1, 9) 

在一些场合中,我使用此阵列的一部分在一个称为cleanup程序,其然后进一步泪此阵列分割成xy,并且z阵列:

x,y,z = cleanup(resultsten[0,:,:,:,:,:]) 

def cleanup(resultsmat): 
    x = resultsmat[:,:,:,:,2] 
    y = resultsmat[:,:,:,:,1] 
    z = resultsmat[:,:,:,:,4] 
    return x,y,z 

然而,也有可能发生,我不想放整个矩阵在我的程序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

http://docs.scipy.org/ doc/numpy/reference/arrays.indexing.html#basic-slicing – seberg

+2

不完全确定,b您可能正在寻找Ellipsis对象:'resultsmat [...,0,2]'等。请使用seberg提供的链接获取更多信息。 – Evert

+0

省略号正是我要找的。我已经浏览了SciPy文档,但是我错过了省略对象。我该如何继续,因为我不能接受评论作为答案? – ROIMaison

回答

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]]]) 
+1

我发现以下有用的 - > https://gist.github.com/Kos/4467206。我看到Evert在使用省略号resultmat [...,0,2]'的注释中发布了更好的解决方案。 –