我在Matlab中有一个单行矩阵theta
,有几百个值;我想为theta
中的每个值创建一个向量。最好我可以简单地将这些值存储在列表中,这样我就可以在列表中使用各个元素的点积;我该怎么做呢?
目前,我的代码是
arrayfun(@(x) [sin(x),0,cos(x)],thetas,'UniformOutput',false);
会生成一堆[1x3 double]
个。
答案 0 :(得分:3)
您也可以创建一个大小为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,:));
答案 1 :(得分:2)
您不必按照strictrude27的建议不必要地构造for
循环来重新构建矩阵。有一个很好的内置函数cell2mat
可以在一行中为你完成。
假设您的A
是100
元素单元格,每个单元格都包含1x3
向量。如果你想收集它们,使A
的每个单元格都是一个单独的行,那么命令就是
matrixA = cell2mat(A(:));
答案 2 :(得分:1)
代码的输出是一个单元格数组,其元素是您想要的1x3向量。因此,假设您已经指定了A = arrayfun(@(x) [sin(x),0,cos(x)],thetas,'UniformOutput',false);
。可以使用thetas
访问与数组A{i}
的第i个元素对应的向量。此时,您可以使用for
循环来构造一个矩阵,其第i列是与thetas
的第i个元素对应的向量。