在Python中循环内部的矩阵操作

时间:2017-05-15 02:02:37

标签: python matrix

我有两个矩阵,A和B.

A=np.matrix([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
B=np.matrix([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])

我想从A中减去一些B'行(即0,2和3)。我试图使用

Index=np.array([0,2,3]) 
for i in Index:
   A[i,:]=A[i,:]-B[i,:]

但它没有用,因为matriz A应该看起来像

matrix([[0, 1, 2],
    [1, 2, 3],
    [4, 5, 6],
    [6, 7, 8]])

我得到了

matrix([[ 1,  2,  3],
    [ 2,  3,  4],
    [ 7,  8,  9],
    [10, 11, 12]])

进行此操作的正确方法是什么?我花了很长时间才意识到这个问题(我试图解决的真正问题有更多变量)并且似乎无法弄明白。

2 个答案:

答案 0 :(得分:1)

如果你的意思是减去,那么你应该使用

A[i,:]=A[i,:]-B[i,:]

而不是

A[i,:]=A[i,:]+B[i,:]

答案 1 :(得分:1)

Numpy具有逐元素减法,例如:

import numpy as np

A=np.matrix([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
B=np.matrix([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])

indices = [0,2,3]
for i in indices:
    A[i,:]=np.subtract(A[i,:], B[i,:])

将为A:

提供此矩阵
[[0, 1, 2],
 [4, 5, 6],
 [4, 5, 6],
 [6, 7, 8]])

这就是你追求的吗?为了获得更好的性能,您还可以更改A:

的特定行
A[indices]=np.subtract(A[indices],B[indices])

哪个会给出相同的答案。