Как проверить форму нескольких массивов, содержащихся в списке?

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Я получил список, содержащий несколько массивов, и я написал следующие коды, чтобы попытаться увидеть форму [0] этих массивов,

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

выходные данные были правильными, но я хочу проверить эти shape[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
  

выходные данные были неправильными, где я допустил ошибку?

Комментарии:

1. Итак, list[i] это будет массив, верно? Если да, то с чем вы хотите его shape[0] проверить?

2. for i in xrange(len(list)) не является pythonic. используйте for l in list вместо этого!

3. Рекомендуется не называть свой список list list именем полезной встроенной функции. Это ошибка, которая может произойти, когда вы вернетесь через месяц и добавите код, для которого требуется встроенный.

4. Для примера, как вы ожидаете, что он будет вести себя там? Вы сказали, что выходные данные были неправильными, так каков ожидаемый o / p?

5. @Divakar потому что форма [0] трех массивов не была одинаковой.

Ответ №1:

 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