Matlab-索引

Matlab-索引,matlab,indexing,Matlab,Indexing,我有一个矩阵a,它是21x1,只包含1和2。 然后我有一个矩阵B,它是6*600的数字矩阵,范围在0到21之间 我想生成一个矩阵C,它是6*600矩阵,包含1和2,这样: 若B矩阵有一个零,那个么C矩阵在那个地方应该有一个零。如果B矩阵有数字5,那么矩阵C应该有矩阵A第5行的元素,依此类推 如果不清楚,请告诉我 % Generate matrices fitting the description A = round(rand(21,1))+1; B = round(rand(6,600)*21

我有一个矩阵a,它是21x1,只包含1和2。 然后我有一个矩阵B,它是6*600的数字矩阵,范围在0到21之间

我想生成一个矩阵C,它是6*600矩阵,包含1和2,这样:

若B矩阵有一个零,那个么C矩阵在那个地方应该有一个零。如果B矩阵有数字5,那么矩阵C应该有矩阵A第5行的元素,依此类推

如果不清楚,请告诉我

% Generate matrices fitting the description
A = round(rand(21,1))+1;
B = round(rand(6,600)*21);
C = zeros(6,600);

% Indexing impossible since zeroes cannot be used as index. So treat per element using linear indexing.

for ii = 1:(6*600)
   if B(ii) == 0
      C(ii) = 0;
   else
      C(ii) = A(B(ii));
   end
end

尽管这段代码可以进一步优化,但这是创建理解的最清晰的方法,如果只对这个小矩阵进行有限次数的评估,则不需要速度。

让我们生成一些示例输入:

A = randi(2,21,1);
B = randi(22,6,600)-1;
然后,输出C将为:

C = B*0;              %// preallocation + take care of the elements that need to be 0
C(B>0) = A(B(B>0));   %// logical indexing
第二行的解释如下:

RHS B> 0-返回一个大小为B的逻辑数组,其含义是B的此特定元素是否大于-0值。 BB>0-返回B中B>0中存在真值的元素,即可用于索引到A中的数字。 A…-返回与B中的有效索引相对应的A元素。
目前尚不清楚。你说矩阵A只有一和二,然后你说:如果一个矩阵有一个零?自从你说它只有一个和两个之后就没有了。只是在你发表评论前30秒编辑了一下。对不起,我打错了。希望现在一切都清楚了。如果能知道为什么投票被否决,那就太好了。A2=[0;A];然后C=A2B+1;如果显式迭代矩阵的所有元素,则最好使用它。@volcompt-不客气!请注意,除了用文字解释问题外,最好提供一个输入/输出示例,这样做容易吗?让其他人来测试他们的解决方案。