Как преобразовать массив 'dtype = object' NumPy в массив 'dtype = float'? - PullRequest
0 голосов
/ 20 марта 2020

Эта проблема вызвана использованием SymPy для поиска уменьшенного ряда строк, у меня есть снимок экрана ниже. Используя SymPy, я могу получить массив объектов NumPy, для меня это довольно запутанно. Во-первых, я не вижу, чтобы числа в матрице rref были заключены в '' или '' ,, почему они являются «объектами». Во-вторых, есть ли способ преобразовать его в np.array 'dtype = float?

M = sy.Matrix([[4, 0, 11, 3], [7, 23, -3, 7], [12, 11, 3, -4]]) 
M_rref = M.rref()
M_rref = np.array(M_rref[0])
M_rref.astype(float)

enter image description here

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Краткий ответ:

M_rref.astype(float) исправит вашу проблему.

Длинный ответ:

Почему это происходит?

Чтобы найти попробуйте вернуться к своей матрице M и попробуйте следующее:

>>> print(M[0])
>>> print(type(M[0]))

Вы получите:

4
sympy.core.numbers.Integer

Вот почему. Даже если говорит , это 4, на самом деле это объект SymPy , который хранится в матрицах SymPy. И так и должно быть: SymPy предназначен для математики c. Поэтому, когда вы преобразуете его в массив numpy, NumPy распознает sympy.core.numbers.Integer как объект.

Надеюсь, что ответ на ваш вопрос.

0 голосов
/ 20 марта 2020

В этом PR есть примечание о неправильном преобразовании матриц numpy в матрицы SymPy. Используя это (а не float, который, я думаю, не предназначен для преобразования содержимого объекта в float), я бы сделал:

>>> sy.Matrix(M.rows, M.cols, [sympify(x) for x in M_rref]).n()

Это должно дать вам матрицу SymPy с записями, оцененными как float .

...