如何在Matlab中分配一组坐标



我在Matlab中有三个向量,I(整数)、J(整数)和V(二重)。我想给一个矩阵赋值,在位置I_I,J_I,范围在I上,值V_I。

这可能吗?问题是,A(I,J)指的是所有可能的组合(I_I,J_J),而不是匹配向量中的元素。

简单的答案是:

 A(sub2ind(size(A),X,Y)) = V

试试看,它很有魅力。

如果你好奇并想要它,解释很简单:

Matlab中的每个矩阵都存储为一维数组,即法向量。

一个2d数组实际上是以第一列、第二列的顺序存储在内存中的,依此类推。正因为如此,你可以用线性下标索引任何Matlab数组,而不依赖于它的维度。

例如:

  A =  [1  4  7;
        2  4  8;
        3  6  9 ];

实际存储为:

[1 2 3 4 5 6 7 8 9]

所以要访问项目,您所要做的就是:(j-1)*num_of_columns+i

因此,A(2,3)返回与A(8)相同的值,也就是说,在这种情况下:8;

sub2in函数将"下标"列表转换为线性索引,给定矩阵的大小。正是你想做的。

有了手头的索引,进行分配就很容易了。

文档:sub2in

Matlab 中的索引

希望我能正确理解你。

我花了很长时间来回答,因为这是Matlab的一个非常重要的部分,很多人使用"向量运算"函数来过度复杂化代码,以完成正常索引可以完成的事情。

尝试使用ACCUMARRAY:

 M = accumarray([I(:) J(:)], V(:));

在这种情况下,如果您有I和J的非唯一组合,V中的相应值将被添加在一起(默认函数为@sum)。如果需要不同的行为,请将函数作为可选参数传递给accumarray(请参阅文档)。

也许您想使用稀疏矩阵格式?A=稀疏(…)有一个签名,可以用来将(i,j,value)三元组强制转换为A的非零,其中其他条目是结构零(不需要存储)。

如果我探究了这个问题,那就是

我认为它应该是类似于A=稀疏(I,j,v)的东西,剩下的参数将默认为m:=max(I),n:=max(j),nzmax:=length(v),这就是我想你想要的。

最新更新