当前位置: 首页 > 知识库问答 >
问题:

根据行和列索引向量分配新矩阵值

武彭薄
2023-03-14

这里是MatLab新手(R2015a,MacOS10.10.5),希望能找到解决这个索引问题的方法。

我想基于一个行索引向量和一个列索引向量来更改一个大型2D矩阵的值。举一个非常简单的例子,如果我有一个3 x 2的零矩阵:

A = zeros(3, 2)

0 0
0 0
0 0

我要把A(1,1)=1,而A(2,2)=1,而A(3,1)=1,这样A现在

1 0
0 1
1 0

我想用向量来表示行和列的索引:

rows = [1 2 3];
cols = [1 2 1];

有没有办法做到这一点而不循环?请记住,这是一个玩具示例,需要处理非常大的2D矩阵。为了获得额外的积分,我是否还可以包含一个向量来指示要插入的值,而不是将其固定为1?

我的循环方法很简单,但很慢:

for i = 1:length(rows)

    A(rows(i), cols(i)) = 1;

end

共有3个答案

元嘉木
2023-03-14

你基本上得到的是矩阵的稀疏定义。因此,sub2ind的替代方法是sparse。它将创建一个稀疏矩阵,使用full将其转换为完整矩阵。

A=full(sparse(rows,cols,1,3,2))
江英卓
2023-03-14

在检查sub2ind的速度时,我在网上找到了这个答案。

idx = rows + (cols - 1) * size(A, 1);

因此呢

A(idx) = 1 % or b

在一个大矩阵上的5次测试(约5秒的操作)表明它比sub2ind快20%。

这里也有一个n维问题的代码。

公冶才
2023-03-14

sub2ind可以在这里提供帮助,

A = zeros(3,2)
rows = [1 2 3];
cols = [1 2 1];

A(sub2ind(size(A),rows,cols))=1
A =

     1     0
     0     1
     1     0

将向量设置为“插入”

b = [1,2,3];
A(sub2ind(size(A),rows,cols))=b

A =

     1     0
     0     2
     3     0
 类似资料:
  • 问题内容: 是否可以从函数构造矩阵?在这种情况下,该函数特别是两个向量的绝对差:。一个使用常规python的最小工作示例: 给予: 有一个看起来像这样的构造会很好: 我可以在其中传递带有参数的输入函数,并保留numpy的速度优势。 问题答案: 我建议看看numpy的广播功能: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

  • 本文向大家介绍MATLAB索引矩阵和数组,包括了MATLAB索引矩阵和数组的使用技巧和注意事项,需要的朋友参考一下 示例 MATLAB允许使用几种方法来索引(访问)矩阵和数组的元素: 下标索引-您可以在其中分别指定所需元素在矩阵每个维度中的位置。 线性索引-将矩阵视为向量,无论其尺寸如何。这意味着,您可以用一个数字指定矩阵中的每个位置。 逻辑索引-在其中使用逻辑矩阵(以及true和false值的矩

  • 由于方法foo中的奇怪行为,我无法编写像bar这样的方法,我需要: 有解决方法吗?提前感谢所有回复。 编译错误: (A) 找不到参数canSlice:breeze的隐式值。linalg。支持CanSlice2[breeze.linalg.DenseMatrix[Double],整数,集合。不可变::。类型,结果]没有足够的参数用于应用方法:(隐式canSlice:breeze.linalg.sup

  • 问题内容: 简要地说:存在类似的问题,最佳答案建议使用。我需要同样的东西,但是需要一个矩阵。 我有两个数组: 它们共同构成应增加的索引: 我想得到这个矩阵: 矩阵将很小(例如5×5),索引的数量将很大(大约10 ^ 3或10 ^ 5)。 那么,有什么比-loop更好(更快)的东西吗? 问题答案: 您仍然可以使用。关键是要转换和成扁平状索引的单一一维数组。 如果矩阵是X ,你可以申请到,构建从结果矩

  • 我有一个这种格式的数据框 我希望使用数据帧操作获得基于行的特定值的所有(索引、列)对。所有(索引、列、行值)对都是唯一的。 我研究了这个问题:pythonic方法获取索引,column for value==1 虽然这个问题和我的问题完全一样,但这个问题的答案有点模糊,我无法根据这些答案得到我想要的。 我也看过类似的: a) 从数据框中选择特定索引、列对 b) Python:获取与特定值匹配的行的

  • 问题内容: 有没有一种很好的方法来区分python中的行向量和列向量?到目前为止,我正在使用numpy和scipy,到目前为止,我看到的是,如果我要给一个向量,说 他们无法说天气,我的意思是行或列向量。此外: 在“现实世界”中哪一个根本是不正确的。我意识到上述模块中向量上的大多数功能都不需要区分。例如,或者我想为自己的方便而与众不同。 问题答案: 您可以通过向数组添加另一个维度来明确区分。 现在将