在python中的特定坐标处替换矩阵的元素

时间:2014-09-03 12:35:31

标签: python performance substitution submatrix

我正试图解决一个“非常简单”的问题。在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>

非常感谢任何帮助。

1 个答案:

答案 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来确定如何进行索引编制。