Форум программистов, компьютерный форум, киберфорум
Наши страницы

Matlab

Войти
Регистрация
Восстановить пароль
 
sergsh
315 / 279 / 30
Регистрация: 30.03.2013
Сообщений: 763
#1

Векторизация - Matlab

04.04.2013, 18:52. Просмотров 1274. Ответов 10
Метки нет (Все метки)

x=1:10;
y=2:11;
z=10:-1:1;


z(x:y)

ans =

10 9


Почему так ?
Должно бы вывести ВСЕ 10 пар значений

У и Х - вектора.
А берется ТОЛЬКО первое значение векторов Х и У ?

Как заставить использовать все значения векторов для вывода 10 пар значений ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 18:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Векторизация (Matlab):

НЕ работает ВЕКТОРИЗАЦИЯ - Matlab
Не работает векторизация. В чем ошибка ??? задаем масивы: x=; n=ones(28,1); v=1:28; y=zeros(max(x),1);

Векторизация цикла заполнения массива структур - Matlab
Возможна ли векторизация цикла (например, for i = 1 : count) заполнения полей структуры my_struct(i) для всего массива структур...

Векторизация - Программирование
Приветствую! Имеется список пикселей по периметру произвольного полигона. Как вычислить только угловые пиксели? За любую инфу по...

Векторизация кода - C++
Задание: Написать программу с ручной векторизацией (выбрать любой вариант из возможных трех: ассемблерная вставка, встроенные функции ...

Векторизация растровых контуров - Алгоритмы
Есть растр, в нем на белом фоне нарисованы произвольно границы трех непересекающихся областей. Каждая область имеет общую границу с двумя...

Как производится векторизация BITMAP? - C++
Народ поможите! Как производится векторизация BITMAP и тому подобное.

10
Зосима
4912 / 3281 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 15
Завершенные тесты: 1
04.04.2013, 19:12 #2
Попробуй:

z(x,y)

Добавлено через 2 минуты
СТОП! Какая матрица, если у тебя z - вектор-строка???
0
sergsh
315 / 279 / 30
Регистрация: 30.03.2013
Сообщений: 763
04.04.2013, 19:36  [ТС] #3
Цитата Сообщение от Зосима Посмотреть сообщение
Попробуй:

z(x,y)

Добавлено через 2 минуты
СТОП! Какая матрица, если у тебя z - вектор-строка???
Ну да, вектор-строка. Это же не мешает делать правильную выборку из z в первый раз.

если использовать : то все правильно.

Вопрос в том почему только одно начальное значение берется из Х и У
Почему не берется весь вектор Х и У ?
0
Зосима
4912 / 3281 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 15
Завершенные тесты: 1
04.04.2013, 19:53 #4
Попробуй запустить в командном окне:
Matlab M
1
>> (1:10):(2:11)
Мне интересно глянуть на результат (выложи его) никогда не сталкивался с такой конструкцией.
0
sergsh
315 / 279 / 30
Регистрация: 30.03.2013
Сообщений: 763
04.04.2013, 20:12  [ТС] #5
z(x)

ans =

10 9 8 7 6 5 4 3 2 1

то есть Х используется выше как вектор

а если пишем
z(x:y)
то Х и У используется как вектор размером 1

то есть запись

z(x:y) эквивалентно z(x(1):y(1))

Добавлено через 16 минут


(1:10) : (2:11)

ans =

1 2

вот такие чудеса
(1:10) матлаб воспринимает как 1
0
Зосима
4912 / 3281 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 15
Завершенные тесты: 1
05.04.2013, 07:45 #6
Чудес нет, просто ты неверно используешь оператор "двоеточие" (странно, что матлаб ошибку не выдает)
Фактически матлаб создает массив с шагом 1 от первого элемента первого вектора до первого элемента второго вектора. Так, если бы y начинался например с 5, то получалось бы [1,2,3,4,5] Понимаешь?
А если ты хочешь вывести 10 пар значений то:
Matlab M
1
2
3
4
5
z = 10:-1:1;
x = 1:9;
y = 2:10; % индексы НЕ должны вылазить за размерность вектора!
 
M = [z(x)' z(y)'] % двустолбцовая матрица результата
Пробуй! О результатах доложи
0
sergsh
315 / 279 / 30
Регистрация: 30.03.2013
Сообщений: 763
05.04.2013, 08:20  [ТС] #7
Так работает, это понятно.

Но вопрос не об этом был.

Был вопрос о том что при записи
z(x)
x - это вектор НЕ единичного размера

а при записи
z(x:y)

x и y - ПРЕВРАЩАЮТСЯ в вектор размером 1 !!!

Мы же не пишем z(x)' и все тем не менее работает
0
Зосима
4912 / 3281 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 15
Завершенные тесты: 1
05.04.2013, 09:19 #8
Еще раз заострю внимание:
запись x:y, где x и y массивы - некорректна!
1
sergsh
315 / 279 / 30
Регистрация: 30.03.2013
Сообщений: 763
05.04.2013, 11:32  [ТС] #9
можно еще так :
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>z([x; y].')
 
ans =
    10     9
     9     8
     8     7
     7     6
     6     5
     5     4
     4     3
     3     2
     2     1
 
>> z([x; y])
 
ans =
    10     9     8     7     6     5     4     3     2
     9     8     7     6     5     4     3     2     1
Но все равно не понятно, почему в одном случае X это вектор
z(x)
в в другом случае X это X(1)
z(x:y)
Кстати такая запись вполне корректна с точки зрения Матлаб, ошибок никаких не выдает

Если мне нужно было бы первое значение то я бы и указал ЯВНО X(1)
z(x(1):y(1))
0
Зосима
4912 / 3281 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 15
Завершенные тесты: 1
05.04.2013, 11:49 #10
Мне не понятно, почему он ошибку не кидает. Видать это "фишка" матлаба
0
Sledge5
523 / 513 / 35
Регистрация: 13.03.2011
Сообщений: 711
07.04.2013, 14:50 #11
У меня есть версия!
Известно:
1. У скобок приоритет операций выше, чем у оператора задания диапазона (функция colon).
2. Если функция возвращает несколько аргументов, то при вычислении выражения (в случае, когда нельзя вектор применять) используется только первый из возвращаемых аргументов.

Таким образом получаем:
Matlab M
1
2
3
4
5
6
>> (1:10)
ans =
     1     2     3     4     5     6     7     8     9    10
>> (2:11)
ans =
     2     3     4     5     6     7     8     9    10    11
Начало диапазона - это число, следовательно, из массива выбирается только первое значение. Это 1.
Конец диапазона - это тоже число, следовательно, из второго массива выбирается только первое значение. Это 2.
Получается конструкция 1:2, что и дает ответ
Matlab M
1
2
3
>> (1:10):(2:11)
ans =
     1     2
А вот операция сложения возможна с векторами и тогда получаем:
Matlab M
1
2
3
>> (1:10)+(2:11)
ans =
     3     5     7     9    11    13    15    17    19    21
2
07.04.2013, 14:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 14:50
Привет! Вот еще темы с ответами:

Расстановка restrict для применения компилятором оптимизаций, таких как векторизация - C (Си)
Не соображу, в каких ситуациях можно применять... Написал несколько функций: // bb и sb выделены в куче и не пересекаются void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru