Умножить матрицу на вектор столбца с переменной, имеющей диапазон (1,101) - PullRequest
0 голосов
/ 02 марта 2019

Я хочу умножить Matrix AB.Чтобы получить вектор Y, где A - 3x4, а B - 4x1 x = range (1,101) B = [2, x, 3, x] Поскольку B содержит переменную x, мы получим 100 различных векторов для Y. Я хочу добавитьих в список, чтобы я мог использовать эти векторы для вычислений позже.

Это то, что я пробовал, но я получаю сообщения об ошибках

AB= list()
for x in range (1,100):
    A = np.matrix('1 9 2 3; 7 2 1 4; 4 2 5 2') 
    B = ('2; x; 3; x')
    AB.append(A @ B)

Что я делаю не так?Ошибка, которую я получаю: (это относится к другому файлу между прочим)

raise ValueError('malformed node or string: ' + repr(node))

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Предпочтительный способ создания массивов:

In [146]: A = np.array([[1, 9, 2, 3],[7, 2, 1, 4],[4, 2, 5, 2]])                                                                     
In [147]: A                                                                     
Out[147]: 
array([[1, 9, 2, 3],
       [7, 2, 1, 4],
       [4, 2, 5, 2]])

Для небольших массивов np.matrix с его имитацией Конструктор MATLAB удобен, но обычно не рекомендуется.

In [148]: x=3                                                                   
In [149]: B = np.array([[2],[x],[3],[x]])                                       
In [150]: B                                                                     
Out[150]: 
array([[2],
       [3],
       [3],
       [3]])
# B = np.array([[2,x,3,x]]).T
In [151]: A@B                                                                   
Out[151]: 
array([[44],
       [35],
       [35]])

Для нескольких значенийиз x:

In [152]: x = np.arange(10)                                                     
In [153]: B = np.empty((4,x.shape[0]), int)                                     
In [154]: B[[1,3]] = x                                                          
In [155]: B[0] = 2                                                              
In [156]: B[2] = 3                                                              
In [157]: B                                                                     
Out[157]: 
array([[2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
In [158]: A@B                                                                   
Out[158]: 
array([[  8,  20,  32,  44,  56,  68,  80,  92, 104, 116],
       [ 17,  23,  29,  35,  41,  47,  53,  59,  65,  71],
       [ 23,  27,  31,  35,  39,  43,  47,  51,  55,  59]])
0 голосов
/ 02 марта 2019

Хорошо, во-первых, вы забыли сделать матрицу B пустой, во-вторых, вам нужно использовать f-строки, чтобы использовать x в качестве переменной вместо символа x, который является несовместимым типом.

AB = list()
for x in range (1,100):
   A = np.matrix('1 9 2 3; 7 2 1 4; 4 2 5 2') 
   B = np.matrix(f'2; {x}; 3; {x}')
   AB.append(A @ B)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...