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

2024-06-13 22:50:39 发布

您现在位置: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中访问的所有索引集,但它不起作用。关于子矩阵替换的所有示例都引用块式row_coord=col_coord示例。除了http://comments.gmane.org/gmane.comp.python.numeric.general/11912之外,没有任何具体的东西与我所面临的问题有关,并且链接中的代码无法工作。在

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

任何帮助将不胜感激。在


Tags: andof元素示例size矩阵colproduct
1条回答
网友
1楼 · 发布于 2024-06-13 22:50:39

假设您使用的是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来计算如何编制索引。在

相关问题 更多 >