我无法将矢量推回到矩阵中。考虑,称为MyMatrix
的N×N矩阵,其中N = 10
由零和非零元素组成,对角元素全部为零。有2个向量:维度为15的Positive_Vector
,由分别从MyMatrix
提取的10个非零元素和由ConceptsVector
元素组成的N
组成。假设向量由以下元素组成
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];
我的问题是如何使用包含相同维度但不同元素值的新向量MyMatrix
更新New_Positive_vector
,以便执行以下操作
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
答案 0 :(得分:1)
你的解释很模糊,但我假设你想从矩阵中提取非零(或正)元素,在这些元素中做一些操作,然后将它们推回到原始矩阵中。然后我建议,
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是非零元素的行号和列号的集合,但我将其变为第三行中的1D索引。第四行是将一些操作(这种情况乘以2)应用于提取的向量并推回原始矩阵中的原始位置。
我假设您执行的操作比将非零元素乘以2更复杂。否则您可以执行类似的操作...
MyMatrix = MyMatrix - (MyMatrix>0).*MyMatrix + (MyMatrix>0).*(MyMatrix)*2
答案 1 :(得分:1)
这只是一种稍微简单的方式来做ysakamoto所做的事情:
%// some test matrix
MyMatrix = (rand(5)>0.5).*rand(5);
%// Logical indices to the non-zero entries
inds = MyMatrix ~= 0;
%// Do operations on the non-zeros, and assign results back
MyMatrix(inds) = 2*MyMatrix(inds);
答案 2 :(得分:0)
如果我理解正确,那么您应该执行以下操作:
首先,使用您为生成PositiveVector
提供的代码,您将获得单个元素而不是向量。我假设您要按如下方式生成它:
[nonZeroRows,nonZeroCols]=find(MyMatrix~=0);
Positive_Vector=MyMatrix(sub2ind(size(MyMatrix),nonZeroRows,nonCols));
假设您现在有一个New_Positive_Vector
要插入NewMyMatrix
,请按以下步骤操作:
NewMyMatrix=zeros(size(MyMatrix));
NewMyMatrix(sub2ind(size(NewMyMatrix),nonZeroRows,nonZeroCols))=`New_Positive_Vector`;