-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dtype для интервала #25
Comments
Здравствуйте, @realkarmakun ! Если мы рассматриваем интервальную матрицу, то это будет класс ArrayInterval у которого есть атрибут _data. Этот атрибут является массивом np.array([], dtype=object) состоящим из элементов ClassicalArithmetic или KaucherArithmetic. Каждый из классов полностью описывает интервал из определённой арифметики, т.е. хранят его нижний и верхний конец. Поскольку каждый элемент массива является собственным классом, то тип массива object. Если я правильно понимаю, то scipy.sparse работает исключительно с объектами np.array([], dtype=float / int). Вот небольшой пример самой проблемы.
С уважением, |
Здравствуйте, да основная задумка dtype в репрезентации объекта как структуры на языке C с ограниченным размером. То есть это по сути отображение объекта python в C структуру для эффективного хранения. Я сам не очень разбираюсь в python, поэтому не могу помочь. Возможно я сам неправильно понимаю dtype и его функции но из того что узнал из документации numpy могу скажать следующее: Я предполагал что intvalpy мог бы поставлять уже созданный dtype который можно передавать как аргументы и к массивам scipy и numpy (у них вроде отлично сделанная интерполяция, ряд методов scipy возвращает numpy массивы). UPD: обнаружил следущую статью для использования как dtype композиции значений, думаю это как раз случай подходящий invalpy https://numpy.org/doc/stable/user/basics.rec.html#structured-arrays, но опять же python для меня лишь хобби, не могу со 100% уверенностью сказать что это решит проблемы |
@realkarmakun С уважением, |
@realkarmakun , добрый день! В целом, с помощью scipy.sparse.coo_matrix можно работать с разреженными массивами, где некоторые элементы могут быть объектами. Вот пример: import numpy as np
import intvalpy as ip
ip.precision.extendedPrecisionQ = False
test = np.eye(3, dtype=object)
test[0, 1] = ip.Interval(5, 7)
sparse = sp.sparse.coo_matrix(test)
#<3x3 sparse matrix of type '<class 'numpy.object_'>'
#with 4 stored elements in COOrdinate format> Для того, чтобы внутренние функции intvalpy также работали - их надо изменить, как и интервальные классы. sparse @ sparse
# TypeError: no supported conversion for types: (dtype('O'),) К сожалению, мне не известны другие библиотеки для интервальных вычислений на Python, которые бы позволяли создавать разреженные матрицы. Поэтому, пока что ничего лучше кроме этого "костыльного" способа я Вам предложить не могу. Ещё раз спасибо за наводку! P.S. |
Жаль, но я отошел от использования dtype, так что этого достаточно (пришлось раскладывать данные на чанки матриц) Но все равно спасибо за ответ. Спасибо за прекрасную библиотеку! Думаю тикет можно закрыть |
Было бы удобно иметь в пакете dtype который можно использовать при конструкции numpy массивов и для других пакетов поддерживающих dtype типизацию.
В моем случае я хотел создать разреженную матрицу в scipy для хранения интервалов. Но тот же scipy не поддерживает стандартный python объект как dtype (так как разреженные матрицы могут быть очень большими у них применяются различные техники для сжатия данных, реализация таких техник в контексте ванильного питон объекта невозможна)
The text was updated successfully, but these errors were encountered: