[英]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
第二行的說明如下:
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.