python / numpy: использовать собственную структуру данных с помощью np.allclose ()?Где искать требования / каковы они? - PullRequest
1 голос
/ 21 марта 2012

Я реализую класс Matrix Product State, который является некоторой специальной схемой разложения тензоров в python / numpy для быстрого прототипирования алгоритма.

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

Что я хочу иметь, так это то, что если я сохраню заданный тензор T в этом формате как T_mps, я получу доступ к восстановленным элементам с помощью T_mps [[i0, i1, ..., iL]]. Это достигается методом getitem (self, key) и отлично работает.

Теперь я хочу использовать numpy.allclose (T, mps_T) для проверки правильности моего разложения.

Но когда я делаю это, я получаю ошибку типа для своего собственного типа:

TypeError: функция не поддерживается для этих типов и не может безопасно привести к поддерживаемым типам

Я посмотрел документацию на allclose и там сказано, что функция работает для объектов типа «массив». Теперь, что это за концепция типа «массив» и где я могу найти ее спецификацию?

Может быть, мне лучше реализовать свой собственный метод allclose? Но это было бы что-то вроде изобретения колеса, не так ли?

Ценю любую помощь Заранее спасибо

1 Ответ

3 голосов
/ 21 марта 2012

Термин «массивоподобный» используется в документации numpy для обозначения «всего, что может быть передано numpy.asarray (), так что он возвращает соответствующий numpy.ndarray»Большинство последовательностей с правильными методами __len__() и __getitem__() работают нормально.Обратите внимание, что __getitem__(i) должен иметь возможность принимать один целочисленный индекс в range(len(self)), а не просто список индексов, как вы, похоже, указываете.Результат из этого __getitem__(i) должен быть либо атомарным значением, о котором знает numpy, например, float или int, либо быть другой последовательностью, описанной выше.Без дополнительной информации о реализации Matrix Product State это все, что я могу помочь.

...