Как изменить переменные в матрице в python для импортированной матрицы .csv?

Я импортирую файл .csv (экспортированный из клена) в python с матрицей (10 на 10) с переменными в каждом элементе. Например: a*b-c находится в (0,0). Как я могу определить a, b и c так, чтобы эти значения передавались в матрицу?

Я уже пробовал a = 1, b = 2 и т. д., прежде чем импортировать матрицу .csv, но это не работает.

import numpy as np
my_matrix = np.genfromtxt('MyMatrix.csv', dtype='unicode', delimiter=',')

Я ожидаю, что переменные будут переданы в матрицу, а матрица будет иметь тип float, чтобы иметь возможность принимать ее инверсию.


person Koen    schedule 15.04.2019    source источник
comment
Можете ли вы предоставить содержимое CSV-файла, если он не слишком велик?   -  person Gilles-Philippe Paillé    schedule 15.04.2019
comment
Это полезно: 1/4*((-mH-mHB),1/4*(-(p3xi+p4xi)),1/4*(-(p3xi+p4xi)),0,1/4*(- (p3xi+p4xi)),0,0,0,0,0 1/4*((-mH-mHB),1/4*(mH+mHB+mHS)*p3xi^2,1/4*(mH +mHB+mHS)*p3xi^2,1/4*(mH+mHB+mHS)*p3xi^2,1/4*(mH+mHB+mHS)*p3xi^2,0,0,0,0, 0 1/4*((-mH-mHB),1/4*(mH+mHB+mHS)*p3xi^3,1/4*(mH+mHB+mHS)*p3xi^3,1/4*( mH+mHB+mHS)*p3xi^3,0,0,0,0,0,0 0,1/4*(mH+mHB+mHS)*p3xi^4,1/4*(mH+mHB+mHS )*p3xi^4,1/4*(mH+mHB+mHS)*p3xi^4,0,0,0,0,0,0 1/4*((-mH-mHB),1/4*( mH+mHB+mHS)*p3xi^5,0,0,1/4*(mH+mHB+mHS)*p3xi^5,0,0,0,0,0 0,0,0,0,0, 1,0,0,0,0 0,0,0,0,0,0,1,0,0,0 0,0,0,0,0,0,0,1,0,0 0,0 ,0,0,0,0,0,0,1,0 0,0,0,0,0,0,0,0,0,1   -  person Koen    schedule 15.04.2019
comment
Да, это полезно. В вашем примере отсутствуют скобки, их необходимо исправить для оценки. Я поставил решение ниже.   -  person Gilles-Philippe Paillé    schedule 15.04.2019


Ответы (1)


Поскольку каждое уравнение находится в текстовом формате, вы можете оценить их как выражения Python:

import numpy as np
my_matrix = np.genfromtxt('MyMatrix.csv', dtype='unicode', delimiter=',')

a = 1
b = 2
c = 3
my_matrix_eval = np.vectorize(lambda x: np.float64(eval(x)))(my_matrix)

Примечание. Это решит проблему, указанную в вопросе. Однако, поскольку приведенный вами в комментариях пример содержит оператор (^), который не является допустимым выражением Python, эти символы необходимо будет преобразовать в соответствующий оператор Python (**).

person Gilles-Philippe Paillé    schedule 15.04.2019
comment
Большое спасибо! Проблема решена. Для проблемы с оператором я сделал следующее: new_data = np_f.replace(my_matrix, '^', '**') - person Koen; 15.04.2019