我正试图解决一个“非常简单”的问题。在Python中不那么简单。给定一个大的矩阵A和另一个较小的矩阵B我想用A代替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中,我尝试使用product(row_coord, col_coord)
中的itertools
来生成需要在A中访问的所有索引集,但它不起作用。子矩阵替换的所有示例都是指逐块row_coord = col_coord示例。除了http://comments.gmane.org/gmane.comp.python.numeric.general/11912之外没有任何具体内容似乎与我所面临的问题有关,并且链接中的代码不起作用。
注意:我知道我可以通过双重for循环实现我需要的东西,但是在我的数据上这样的循环为一次迭代的运行增加了9秒,我正在寻找一种更快的方法来实现它。 / p>
非常感谢任何帮助。
答案 0 :(得分: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
我使用this excellent answer by unutbu来确定如何进行索引编制。