如何检查列表中包含的多个数组的形状?

时间:2016-09-30 14:34:13

标签: python arrays numpy

我有一个包含多个数组的列表,我写了下面的代码,试着看看这些数组的形状[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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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