Структура данных массива numpy реализована в C. Размеры массива хранятся в структуре C. Они не хранятся в корте Python. Поэтому каждый раз, когда вы читаете атрибут shape
, создается новый кортеж Python для новых целочисленных объектов Python. Когда вы используете arr.shape[0]
, этот кортеж затем индексируется, чтобы вытащить первый элемент, что добавит немного дополнительных накладных расходов. len(arr)
должен только создать целое число Python.
Вы можете легко убедиться, что arr.shape
создает новый кортеж каждый раз, когда он читается:
In [126]: arr = np.random.randint(1, 11, size=(3, 4, 5))
In [127]: s1 = arr.shape
In [128]: id(s1)
Out[128]: 4916019848
In [129]: s2 = arr.shape
In [130]: id(s2)
Out[130]: 4909905024
s1
и s2
имеют разные id
s; они представляют собой разные кортежи.
Это происходит потому, что posManager.getPosition()
возвращает ноль. Необходимо убедиться, что код:
getCoordinate()
в случае, если posManager.getPosition()
возвращает ноль.