IPB

Здравствуйте, гость ( Вход | Регистрация )


Youtube Vkontakte Mail Google KubaLibre Shareman Down-House

Скрыть объявления

Объявления

А у нас появился женский раздел^^ Приглашаем всех к себе в гостиsmile3.gif
С уважением, Ваши девушки flirt.gif

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

3 страниц V < 1 2 3  
Ответить в эту темуОткрыть новую тему
> МATLAB
daniil
сообщение 11.8.2011, 18:51
Сообщение #41


Мастер Домовой
*****

Группа: Домовые
Сообщений: 597
Регистрация: 20.12.2006

Пол: Мужской


Репутация:   22  


Цитата(Photon @ 3.8.2011, 16:58) *

Добрый день.
Знает ли кто-нибудь, как правильно использовать логическую индексацию? Такая проблема:
Хочу выбрать из массива элементы следующим способом:

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);

не работает.
Цитата(daniil @ 11.8.2011, 20:23) *

Работать с циклами лучше с точки зрения экономии памяти.

Но все же для ускорения расчета лучше циклы не использовать. Ты согласен с этим?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V < 1 2 3
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.3.2024, 17:13