Подсказки типа Numpy в Python (PEP 484)

Я хотел бы добавить подсказки типа к методу, который принимает массив numpy в качестве входных данных и возвращает строку. Этот массив numpy содержит поплавки, поэтому я попробовал:

import numpy as np
def foo(array: np.ndarray[np.float64]) -> str:

Но это не сработает из-за TypeError: 'type' object is not subscriptable.

Я нашел это, но не смог следить за обсуждениями!


person sidou    schedule 16.10.2018    source источник
comment
Похоже, что эта ссылка является экспериментальным пакетом, который все еще находится в разработке. Вы смотрели встроенную библиотеку типа?   -  person G. Anderson    schedule 16.10.2018
comment
stackoverflow.com/ questions/35673895/ — это ответ, который я дал несколько лет назад. Подсказки типа 484 тогда были экспериментальными и, возможно, остаются ими до сих пор. И stackoverflow.com/questions/ 38005633/   -  person hpaulj    schedule 17.10.2018
comment
Теперь в репозитории github numpy есть открытая проблема, касающаяся подсказок/аннотаций типов для numpy. типы.   -  person Jasha    schedule 02.09.2020


Ответы (1)


Проверьте nptyping. Он предлагает подсказки типов для массивов numpy.

В вашем случае вы получите:

from nptyping import NDArray, Float64

def foo(array: NDArray[Float64]) -> str:
    ...

Вы также можете проверить свои экземпляры:

import numpy as np
from nptyping import NDArray, Float64

arr = np.array([[1.0, 2.0],
                [3.0, 4.0],
                [5.0, 6.0]])

isinstance(arr, NDArray[(3, 2), Float64])  # True.

# Or if you don't want to check the dimensions and their sizes:
isinstance(arr, NDArray[Float64])  # Also True.
person R H    schedule 09.02.2019
comment
Статус проекта? - person Alan; 13.04.2019
comment
Он живой. Однако в последнее время не было никаких запросов на добавление функций или сообщений об ошибках. - person R H; 14.04.2019
comment
Было бы здорово также иметь представление о методах ndarray, таких как argmax, shape , .. - person WestCoastProjects; 30.05.2019
comment
Поддержка/подключение к mypy было бы здорово в этом проекте, т.е. чтобы, если бы я написал arr: NDArray[(3, 1), Any] = np.array([[1.0, 2.0], [3.0, 4.0]]), я бы получил ошибку типа через mypy. - person myfirstAnswer; 23.11.2020
comment
Точно так же у PyCharm возникают проблемы с подключением NDArray к np.ndarray. - person Бојан Матовски; 03.02.2021