2016-02-14 50 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