Как я могу использовать any () в многомерном массиве? - PullRequest
3 голосов
/ 02 апреля 2009

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

Идеи

Я бегу 2009a (R17, на старом языке, я думаю).

Ответы [ 2 ]

10 голосов
/ 02 апреля 2009

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

anyAreTrue = any(A(:));

РЕДАКТИРОВАТЬ: Чтобы объяснить немного больше для тех, кто не знаком с синтаксисом, A (:) использует оператор двоеточия , чтобы взять все содержимое массив A , независимо от размеров, и преобразуйте их в один столбец-вектор (размером цифра (A) -by-1). Для работы с результирующим вектором столбца требуется всего один вызов ANY .

2 голосов
/ 02 апреля 2009

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

любой (A (:))

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

любой (изменения формы (А, [], 1))

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...