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