簡體   English   中英

Matlab-索引

[英]Matlab - indexing

我有一個21x1的矩陣A ,只包含一和二。 然后我有一個矩陣B ,它是6 * 600的數字矩陣,范圍在0到21之間。

我想生成一個矩陣C ,它是6 * 600包含一和二的矩陣,這樣:

如果B矩陣為零,則矩陣C在該位置應為零。 如果B矩陣的編號為5,則矩陣C的元素應位於矩陣A第5行,依此類推。

如果不清楚,請告訴我。

讓我們生成一些樣本輸入:

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。
  • B(B>0) -返回B的元素,其中B>0存在true值(即可以用於索引A )。
  • A(...) -返回A的元素對應於從有效索引B
% 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

盡管可以進一步優化代碼段,但這是建立理解的最清晰方法,並且如果只是這個小的矩陣進行了有限的次數評估,​​則不需要速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM