2013-07-16 3 views
1

У меня есть массив вроде x, я хочу сделать некоторые работы над ним и поместить результат в новый массив y. то я должен сравнить эти два. если они одинаковы по сравнению с ними (то есть они могут быть немного разными), это нормально, и алгоритм заканчивается, иначе я должен продолжить итерацию , проблема заключается в сравнении этих двух. это два массива 2d с неизвестными элементами. я сделал два разных пути, но ни один из них, где хорошо: первого способа:Как сравнить два массива в Matlab?

d = x - y 
if d < 5 
    disp('end') 
end 

и так далее
, но он не работает хорошо, если честно он не работает на всех
других путь, который я использовал это:

isequal(x,y) 

в то время как они же она вернет 0, но если они не и даже с небольшой разницей, являются результатом будет 1, и это не нормально, потому что, как я сказал, алгоритм должен учитывать разницу в литве и остановить итерат ion Что мне делать?

+1

Не должно быть 'if d <5' в первую очередь? – am304

+0

спасибо, так полезно – deansam

ответ

2

Если 5 является порог в порядке, то это должно работать:

d=abs(x-y); 
if all(d<5) 
    disp('end') 
end 

Если вы не знаете, что этот порог, то это совсем другой вопрос. Определение разумного порога зависит от вашего приложения и часто является компромиссом - не может быть «правильного» ответа, если ваши данные являются переменными. Посмотрите на некоторые основные статистические данные - команда zscore может стать полезным началом.

+0

он не работает, массив ответов получил числа, подобные 30 40 22 и так далее, но он принимает d <5 – deansam

+0

Можете ли вы показать детали массива? Код для 'x' и' y'? Я не могу помочь вам, без каких-либо подробностей! –

+0

мой код слишком длинный и сложный i dono, если я поместил его часть здесь, было бы понятно, в любом случае код: k = 44;% k group n = 556;% все элементы r = 12;% элементы в группе b = 1;% номер столбца, который равен 1 % 1-й gouping data в группе k group.each принадлежит строка. a - массив ячеек a = grouhbandi (n, k); e1 = Ks (a, k); % первые элементы a в каждой строке, которые являются k-элементами, e1 - это массив i = 0; имеет = 1000;% предел остановки итерации при наличии> 5 a = Ekmeans (a, k, r); a = newks (a, k);% эти два кода вычисляют новую группу k e2 = Ks (a, k);% это новый Ks, который будет выделяться в e2 had = e2-e1; had = abs (had); end – deansam

0

Другим способом проверки вектора разности является использование функции «Найти()» в MATLAB. Как Нолан, я думаю, вам лучше использовать абсолютную ценность разницы. idx = find(abs(a-b)>threshold) даст вам показатели, превышающие порог. Если значение null, то вы завершаете итерации.

Смежные вопросы