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

1 投票
1 回答
1199 浏览
提问于 2025-04-19 14:07

我正在尝试解决一个“非常简单”的问题,但在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 的这个很棒的回答 来搞清楚如何进行索引。

撰写回答