Matlab: получение списка векторов - PullRequest
2 голосов
/ 16 июня 2011

у меня матрица из одной строки theta в Matlab с парой сотен значений;Я хотел бы создать вектор для каждого значения в theta.Предпочтительно я могу просто сохранить эти значения в списке, чтобы я мог взять точечные произведения отдельных элементов в списке списка;как бы я поступил так?

На данный момент у меня есть код

arrayfun(@(x) [sin(x),0,cos(x)],thetas,'UniformOutput',false);

, который генерирует кучу [1x3 double].

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

Вместо создания массива ячеек вы также можете просто создать числовой массив размером numberOfThetas-by-3, например, так:

A = [sin(thetas);zeros(size(thetas));cos(thetas)]'; %'# make n-by-3 by transposing

Чтобы вычислить скалярное произведение между любыми двумя векторами i и j, вы можете написать

dotProduct = sum(A(i,:).*A(j,:));
2 голосов
/ 16 июня 2011

Вам не нужно излишне создавать циклы for, чтобы перестроить матрицу, как это было предложено строго rudede27.Есть хорошая встроенная функция cell2mat, которая делает это за вас в одной строке.

Скажем, ваш A является элементом 100, каждая из которых содержит 1x3 вектор.Если вы хотите собрать их так, чтобы каждая ячейка A представляла собой отдельную строку, команда будет просто

matrixA = cell2mat(A(:));
1 голос
/ 16 июня 2011

Выходные данные для вашего кода - это массив ячеек, элементами которых являются нужные вам векторы 1x3.Итак, предположим, что вы назначили A = arrayfun(@(x) [sin(x),0,cos(x)],thetas,'UniformOutput',false);, как у вас там.Вектор, соответствующий i-му элементу массива thetas, доступен с помощью A{i}.В этот момент вы можете использовать цикл for для построения матрицы, чей i-й столбец является вектором, соответствующим i-му элементу thetas.

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