Проверьте форму массива NumPy - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу написать функцию, которая принимает пустой массив, и я хочу проверить, соответствует ли он требованиям.Меня смущает то, что:

np.array([1,2,3]).shape = np.array([[1,2,3],[2,3],[2,43,32]]) = (3,)

[1,2,3] должно быть разрешено, а [[1,2,3],[2,3],[2,43,32]] - нет.

Допустимые формы:

[0, 1, 2, 3, 4]
[0, 1, 2]
[[1],[2]]
[[1, 2], [2, 3], [3, 4]]

Не разрешено:

[] (empty array is not allowed)
[[0], [1, 2]] (inner dimensions must have same size 1!=2)
[[[4,5,6],[4,3,2][[2,3,2],[2,3,4]]] (more than 2 dimension)

1 Ответ

0 голосов
/ 10 февраля 2019

Вы должны начать с определения того, что вы хотите с точки зрения формы.Я попытался понять это из вопроса, пожалуйста, добавьте больше деталей, если это не правильно.

Так что здесь у нас (1) пустой массив не допускается и (2) не более двух измерений.Он переводится следующим образом:

def is_allowed(arr):
  return arr.shape != (0, ) and len(arr.shape) <= 2

Первое условие просто сравнивает форму вашего массива с формой пустого массива.второе условие проверяет, что массив имеет не более двух измерений.

С внутренними измерениями возникает проблема.Некоторые из списков, которые вы предоставили в качестве примера, не являются массивами.Если вы приведете np.array([[1,2,3],[2,3],[2,43,32]]), вы получите просто массив, в котором каждый элемент является спискомЭто не «настоящий» массив с прямым доступом ко всем элементам.См. Пример:

>>> np.array([[1,2,3],[2,3],[2,43,32]])
array([list([1, 2, 3]), list([2, 3]), list([2, 43, 32])], dtype=object)
>>> np.array([[1,2,3],[2,3, None],[2,43,32]])
array([[1, 2, 3],
       [2, 3, None],
       [2, 43, 32]], dtype=object)

Поэтому я бы порекомендовал (если вы работаете с обычными списками) проверить, что все массивы имеют одинаковую длину, но не пустые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...