如何在Matlab中指定一组坐标?

如何在Matlab中指定一组坐标?,matlab,Matlab,我在Matlab中有三个向量,I(整数的),J(整数的)和V(双精度的)。 我想给一个矩阵赋值,在位置I_I,J_I,范围在I上,值V_I 可能吗? 问题是A(I,J)指的是所有可能的组合(I_I,J_J),而不是匹配向量中的元素。尝试使用: 在这种情况下,如果I和J的组合不是唯一的,则V中的相应值将被加在一起(默认函数为@sum)。如果需要不同的行为,请将函数作为可选参数传递给accumarray(请参见)。尝试使用: 在这种情况下,如果I和J的组合不是唯一的,则V中的相应值将被加在一起(默认

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

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

尝试使用:

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

尝试使用:


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

可能需要使用稀疏矩阵格式?A=sparse(…)有一个签名,可用于将(i,j,value)三元组强制为A的非零,其中其他项为结构零(不需要存储)

如果我想问这个问题,那就是


我认为它类似于A=sparse(I,j,v),剩下的参数将默认为m:=max(I),n:=max(j),nzmax:=length(v),这是我想象中您想要的。

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

如果我想问这个问题,那就是


我认为它类似于A=sparse(I,j,v),剩下的参数将默认为m:=max(I),n:=max(j),nzmax:=length(v),这就是我想象中您想要的。简短的答案是:

 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

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

有了手头的索引,就很容易进行赋值

文件:

希望我理解正确


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

简短的回答是:

 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

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

有了手头的索引,就很容易进行赋值

文件:

希望我理解正确


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

请您将问题的措辞更清楚一些,好吗?我不清楚你对我的意思是什么?你能把你的问题说得更清楚一点吗?我不清楚你在我身上的意思是什么?