2016-02-14 54 views
0

find()函數返回元素非零的索引。我試着用不同的數組的大小但都給出錯誤:Matlab:對find()函數的困惑

In an assignment A(I) = B, the number of elements in B and I must be the same. 

我很困惑,因爲當數組大小相同,還是我得到這個錯誤。

這僅僅是明白什麼地方出了錯: 讓,

例1:同一陣列尺寸

A = [20;21;3;45;5;19;1;8;2;1]; 
B = A; 
for i =1:length(B) 
pos(i) = find(A == B(i)); 
end 

我應該拿pos = [1,2,3,4,5,6,7,8,9,10]。但循環退出i = 7後,給予`POS = [1,2,3,4,5,6]」

例2:異種數組大小

C = [20;1;10;3]; 

for i =1:length(C) 
    pos(i) = find(A == C(i)); 
    end 

有人可以請解釋什麼是錯的我的理解和我如何使用A和B的相同和不同數組長度的說明?謝謝。

+1

閱讀錯誤:問題與作業有關。 'find()'返回一個數組,並且將*賦給一個標量'pos(i)'。除非有'A == B(i)'的單個元素爲真,否則你肯定會有錯誤。 –

回答

1

問題是find(A == 1)返回兩個索引,都是7和10,並且不能存儲在pos(i)中,因爲pos(i)只能保存一個數字。

不幸的是,通用錯誤消息碰巧與矩陣中的兩個矩陣有相同的名稱,在您看到它幾次之前可能會引起混淆。

+0

謝謝你的解釋。就我的理解而言,當相同的元素出現在數組中的不同索引位置時(eq;當每個數組包含所有唯一元素時,如A = [20; 21; 3; 45; 5; 19 ; 1; 8; 2; 15];然後沒有錯誤)。而且,我現在可以使用不同大小的數組,條件是每個數組都包含唯一的元素。有沒有辦法來防止這樣的錯誤,因爲在很多情況下,我不會控制陣列的元素;但我需要應用find()。 – Sm1