1

我正在尝试解决一个“非常简单”的问题。在 Python 中不是那么简单。给定一个大矩阵 A 和另一个较小的矩阵 BI 想用 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 中,我尝试使用product(row_coord, col_coord)fromitertools来生成需要在 A 中访问的所有索引集,但它不起作用。所有关于子矩阵替换的示例都参考了逐块 row_coord = col_coord 示例。除了http://comments.gmane.org/gmane.comp.python.numeric.general/11912之外,没有什么具体的东西似乎与我面临的问题有关,并且链接中的代码不起作用。

注意:我知道我可以通过双 for 循环实现我需要的东西,但是在我的数据上,这样的循环增加了一次迭代的运行时间 9 秒,我正在寻找一种更快的方法来实现它。

任何帮助将不胜感激。

4

1 回答 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 这个出色的答案来确定如何进行索引。

于 2014-09-03T13:29:46.080 回答