矩阵操作难度

时间:2014-03-11 04:16:53

标签: matlab vector matrix matrix-multiplication

我无法将矢量推回到矩阵中。考虑,称为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

3 个答案:

答案 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`;
相关问题