МATLAB |
Здравствуйте, гость ( Вход | Регистрация )
Youtube | Vkontakte | KubaLibre | Shareman | Down-House |
МATLAB |
daniil |
11.8.2011, 18:51
Сообщение
#41
|
Мастер Домовой Группа: Домовые Сообщений: 597 Регистрация: 20.12.2006 Пол: Мужской Репутация: 22 |
Добрый день. Знает ли кто-нибудь, как правильно использовать логическую индексацию? Такая проблема: Хочу выбрать из массива элементы следующим способом: Index = (A(:,1) == arExample(1)) | (A(:,1) == arExample(2)) | (A(:,1) == arExample(3)); arNew(:,1) = A(Index,2); ... Правила описываются в Index (так называемая логическая индексация). Приветствую. Логическая индексация в MATLAB - это матрица из нулей и единиц, подставленная в качестве операнда-индекса при выборке элемента из массива. Здесь есть пример, в котором используется матрица D(4x4). Берётся исходная матрица С, и по матрице D, как по трафарету, производится выборка элементов из C в виде C(D). В твоём посту в принципе, результатом выражения является матрица, называемая логической, т.к. она содержит нули и единицы. Все реляционные операции в MATLAB (== , > , <), как и выполненные над обычными матрицами логической операции, в результате, выдают логические матрицы. У логической матрицы есть размерность, она может быть 1x1 но не обязана. Это я к тому, что выражение A(Index,2) мне не понятно. Но в случае косяка, по-любому, должно вылезать что-то типа "matrix dimensions must agree". Кроме того, если взять обычную матрицу и запихать её в качестве операнда бинарной логической операции, то получится логическая матрица, что очень гибко и ожидаемо. Минус всей красоты только в том, что размерность логической матрицы должна совпадать с размерностью матрицы из которой происходит выборка. Если матрицы большие, то будут проблемы. Работать с циклами лучше с точки зрения экономии памяти. |
Photon |
20.8.2011, 21:16
Сообщение
#42
|
Домовой Группа: Домовые Сообщений: 54 Регистрация: 28.11.2007 Пол: Мужской Репутация: 0 |
Спасибо за ответ. Пример посмотрел. Но у меня проблема как раз в составлении этого самого трафарета. В примере по ссылке описывается случай простого условия, т.е. когда сравнение идет с одним значением (равно NaN). А у меня условие составное:
Код Index = (A(:,1) == arExample(1)) | (A(:,1) == arExample(2)) | (A(:,1) == arExample(3)); Как должно быть составлено это выражение, чтобы работало и для случая двух, трех, четырех и т.д. элементов массива arExample? Запись: Код Index = (A(:,1) == arExample); не работает. Работать с циклами лучше с точки зрения экономии памяти. Но все же для ускорения расчета лучше циклы не использовать. Ты согласен с этим? |
Текстовая версия | Сейчас: 25.9.2024, 12:01 |