Вопрос

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

Идеи?

Я использую 2009a (думаю, R17, говоря старым языком).

Это было полезно?

Решение

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

anyAreTrue = any(A(:));

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

Другие советы

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

любой(А(:))

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top