#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