Matlab найти не работает с массивом больших размеров? - PullRequest
2 голосов
/ 01 июля 2010

скажем A = ранд (2,2,2);[a, b, c] = найти (A == A (1,2,2))

Я получил a = 1 b = 4 c = 1

что?

Ответы [ 4 ]

5 голосов
/ 01 июля 2010

Попробуйте это:

[a,b,c] = ind2sub(size(A), find(A==A(1,2,2)))

Источник: Найти , ind2sub

0 голосов
/ 01 июля 2010

Выходы функции FIND представляют собой два набора индексов (a и b) и значения этих индексов (c). Для матриц, размер которых превышает 2, вторым индексом будет линейный индекс .

В вашем примере вы создаете логический массив при выполнении A == A(1,2,2). Этот логический массив, который имеет значение 1 (т.е. true) с индексом (1,2,2), передается в функцию FIND . Положение этого ненулевого значения находится в первой строке матрицы (выход a = 1) и в четвертом линейном индексе в оставшихся измерениях (выход b = 4). Ненулевое значение 1 выводится для c.

0 голосов
/ 01 июля 2010

Поиск работает только тогда, когда вы пытаетесь применить его к 2-мерным массивам.

В Matlab Central доступно несколько функций, которые будут выполнять n-мерные массивы.

0 голосов
/ 01 июля 2010

Используйте равенство == вместо оператора присваивания =.

A = rand(2,2,2); [a,b,c] = find(A == A(1,2,2))

См. Документацию для НАЙТИ . выходные аргументы не для всех направлений, только для строк и столбцов. Кажется, MATLAB объединяет 3-е направление вдоль 2-го и возвращает 4-й столбец. Последний аргумент равен 1, потому что у вас есть только одно совпадение.

...