2016-09-30 41 views
0

我得到了包含多个阵列的列表,我写了下面的代码试试,看形状[0]这些阵列,如何检查列表中包含的多个数组的形状?

for i in xrange(len(list)): 
    k = list[i].shape[0] 
    print k 

的输出是正确的,但我想检查这些形状[0 ],也就是说,如果它们是相同的,函数将继续,否则,如果它们不是相同的数字,则函数会中断。这个怎么做?随时给我建议,非常感谢。

更新

我创建了一个名为 'AB' 包含3个不同的阵列列表,并使用错误和异常代码来检查形状[0]:

ab = [np.array([[1,2,3],[1,2,3]]), 
     np.array([[1,2,3]]), 
     np.array([[1,2,3],[1,2,3],[0,1,2],[0,9,9]])] 

for i in xrange(len(ab)): 
k = ab[i].shape[0] 
print k 

try: 
    all(x.shape[0]==ab[0].shape[0] for x in ab) 
    print 'True' 
except ValueError: 
    print 'False' 

但输出为:

2 
1 
4 
True 

输出错了,我在哪里犯了一个错误?

+0

所以,'名单[I]'将是一个数组,对不对?如果是这样,你想要检查它的“形状[0]”是什么? – Divakar

+2

'对于我在xrange(len(list))''不是pythonic。相反,使用'for l in list'! –

+1

最好不要将列表命名为'list',因为'list'是一个有用内建的名称。当你一个月回来并添加需要内置的代码时,这是一个等待发生的错误。 –

回答

5
all(x.shape[0]==list[0].shape[0] for x in list) 
2

可以使用set理解创建一组独特的形状然后检查组的长度大于1:

shapes = {arr.shape[0] for arr in my_list} 
if len(shapes) > 1: 
    # return None 

或者作为一种更好的方法试图应用numpy的您的阵列功能,如果他们不是在相同的形状,将提出一个ValueError

try: 
    np.hstack(my_list) 
except ValueError: 
    # rasise exception or return None 
相关问题