Как я могу использовать any() в многомерном массиве?

Я проверяю произвольно большой и произвольно размерный массив логических выражений и хочу выяснить, верны ли какие-либо один или несколько из них. any() работает одновременно только с одним измерением, как и sum(). Я знаю, что могу проверить количество измерений и повторять any(), пока не получу один ответ, но мне нужен более быстрый и, честно говоря, более элегантный подход.

Идеи?

У меня 2009a (кажется, R17 на старом языке).


person Marc    schedule 02.04.2009    source источник


Ответы (2)


Если ваши данные находятся в матрице A, попробуйте следующее:

anyAreTrue = any(A(:));

EDIT: Чтобы объяснить немного больше для тех, кто не знаком с синтаксисом, A(:) использует оператор двоеточия для получения всего содержимого массива A, независимо от размеров, и преобразовать их в один вектор-столбец (размером numel(A)-by-1). Для работы с результирующий вектор-столбец.

person gnovice    schedule 02.04.2009

Как уже отмечалось, правильным решением является преобразование результата в вектор. Тогда любой даст нужный результат. Таким образом,

любой(А(:))

дает глобальный результат, истинный, если любой из элементов numel(A) был истинным. Вы также могли бы использовать

любой (изменить форму (A, [], 1))

который явно использует оператор изменения формы. Если вы не хотите делать дополнительный шаг по преобразованию ваших матриц в векторы для их применения, то другой подход — написать собственную функцию. Например, вот функция, которая сделает это за вас:

======================

результат функции = myany(A)

% определяет, был ли вообще какой-либо элемент в A ненулевым

результат = любой (А (:));

======================

Сохраните это как m-файл на вашем пути поиска. Прелесть MATLAB (справедливая для любого языка программирования) в том, что он полностью расширяем. Если есть какая-то возможность, которую вы хотели бы иметь, просто напишите небольшую идиому, которая делает это. Если вы делаете это достаточно часто, вы настроите среду в соответствии со своими потребностями.

person Community    schedule 02.04.2009