在Python中替换矩阵中特定坐标的元素
我正在尝试解决一个“非常简单”的问题,但在Python中并不那么简单。给定一个大的矩阵A和一个较小的矩阵B,我想用B中的某些元素替换A中的元素。
在Matlab中,这样做看起来很简单:
Given A, row_coord = [1,5,6] col_coord = [2,4], and a matrix B of size(3X2), A[row_coord, col_coord] = B
在Python中,我尝试使用itertools
中的product(row_coord, col_coord)
来生成所有需要在A中访问的索引,但这并没有成功。所有关于子矩阵替换的例子都涉及到行坐标和列坐标相同的情况。除了这个链接,似乎没有其他具体的例子能解决我面临的问题,而链接中的代码也无法正常工作。
注意:我知道我可以通过双重循环来实现我需要的功能,但在我的数据上,这样的循环会让每次运行多花9秒,我在寻找更快的实现方法。
任何帮助都将不胜感激。
1 个回答
0
假设你在使用 numpy
数组,如果你的 B
是一个单一的数值,那么下面的代码可以用来把你选中的元素赋值为 B
。
itertools.product
会生成所有的坐标对,然后我们把这些坐标对转换成 numpy
数组,接着用它来索引你原来的数组:
import numpy as np
from itertools import product
A = np.zeros([20,20])
col_coord = [0,1,3]
row_coord = [1,2]
coords = np.array(list(product(row_coord, col_coord)))
B = 1
A[coords[:,0], coords[:,1]] = B
我参考了 unutbu 的这个很棒的回答 来搞清楚如何进行索引。