我在将向量推回矩阵时遇到问题。考虑到 N×N 矩阵称为 MyMatrix,其中 N = 10,它由零和非零元素组成,对角线元素全为零。有 2 个向量:维度为 15 的 Positive_Vector
,由从 MyMatrix
提取的 10 个非零元素组成,以及由 N< 组成的
ConceptsVector
/code> 元素分别。假设向量由以下元素组成
Positive_Vector = [MyMatrix(1,2)、MyMatrix(1,6)、MyMatrix(2,5)、MyMatrix(2,6)、MyMatrix(2,10)、MyMatrix(3,1)、MyMatrix( 4,10)、MyMatrix(5,3)、MyMatrix(5,9)、MyMatrix(6,1)、MyMatrix(6,7)、MyMatrix(7,3)、MyMatrix(7,4)、MyMatrix(8 ,1),MyMatrix(8,3)];
Concepts = [0.6,0.1,0.0,0.2,0.8,0.33,0.21,0.5,0.11];
我的问题是如何使用由相同维度但不同元素值组成的新向量New_Positive_vector
更新MyMatrix
,以便以下操作
C1 = Concepts*NewMyMatrix
可以执行吗?
这就是我提取Positive_Vector
的方法。有人可以演示如何执行相反的操作,即将 New_Positive_Vector
的新元素推回 NewMyMatrix
中的相应位置吗?
for ii = 1:10
for jj = 1:10
if (MyMatrix(ii,jj)~=0)
Positive_Vector = MyMatrix(ii,jj);
end
end
end
最佳答案
你的解释很模糊,但我假设你想从矩阵中提取非零(或正)元素,在这些元素中进行一些操作,然后将它们推回到原始矩阵中。那么我建议,
MyMatrix = (rand(5)>0.5).*rand(5);
[n,m,Positive_vector] = find(MyMatrix);
k = sub2ind(size(MyMatrix),n,m);
MyMatrix(k) = Positive_vector*2;
第一行用于生成带有一些零的随机矩阵。第二行是找到矩阵的非零元素。如果你只想要正数,那么你可以将其修改为find(MyMatrix > 0)
。这里,n和m是非零元素的行号和列号的集合,但我在第三行将其变成一维索引。第四行是对提取的向量应用一些运算(本例中乘以 2)并将其推回到原始矩阵中的原始位置。
我假设您执行的操作比将非零元素乘以 2 更复杂。否则您可以执行类似的操作...
MyMatrix = MyMatrix - (MyMatrix>0).*MyMatrix + (MyMatrix>0).*(MyMatrix)*2
关于matlab - 矩阵运算难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316362/