如何在 MATLAB 中的元胞数组中进行点积?
How to do dot product in a cell array in MATLAB?
我有一个包含 5 个矩阵的元胞数组 (C
)。每个矩阵代表不同的一组向量(即每个矩阵有两列。一列是 x 坐标;另一列是 y 坐标。行号的变化取决于向量的数量)
C{1} = [20x2 double];
C{2} = [23x2 double];
C{3} = [32x2 double] ...
本例中C{1}中有20个向量; C{2} 中的 23 个向量等等。有没有什么办法(除了一个或两个 for 循环)来为每个矩阵的两个相邻向量做点积?
C{1} = [2,3; 1,2; 5,4; 8,3; ...]
计算 [2,3]&[1,2] 的点积,然后 [1,2]&[5,4] 然后 [5,4]&[8,3] 等等。
所以最后,我希望得到一个包含 5 个单元格的单元格数组。每个单元格都是一个 [n-1,1] 数组(n 是矩阵的长度)。
dots = [5x1 cell].
dots{1} = [19x1 double];
dots{2} = [22x1 double];
dots{3} = [31x1 double] ...
您可以使用cellfun
计算每个坐标(行)和下一个坐标(行)之间的点积。
dots = cellfun(@(x)dot(x(1:end-1,:), x(2:end, :), 2), C, 'uniform', 0)
说明
我们使用 x(1:end-1,:)
获取第一行进行比较,然后要与 下一个 行 x(2:end,:)
执行点积。在执行点积时,我们要指定我们想要沿第二个维度的点积,因此我们为 dot
.
的第三个输入提供 2
dp = dot(C{1}(1:end-1,:), C{1}(2:end,:), 2);
我们使用 cellfun
对每个元胞数组元素执行此操作。
例子
C = {rand(10,2), rand(20,2), rand(30,2), rand(40, 2), rand(50,2)};
dots = cellfun(@(x)dot(x(1:end-1,:), x(2:end, :), 2), C, 'uniform', 0)
[9x1 double] [19x1 double] [29x1 double] [39x1 double] [49x1 double]
我有一个包含 5 个矩阵的元胞数组 (C
)。每个矩阵代表不同的一组向量(即每个矩阵有两列。一列是 x 坐标;另一列是 y 坐标。行号的变化取决于向量的数量)
C{1} = [20x2 double];
C{2} = [23x2 double];
C{3} = [32x2 double] ...
本例中C{1}中有20个向量; C{2} 中的 23 个向量等等。有没有什么办法(除了一个或两个 for 循环)来为每个矩阵的两个相邻向量做点积?
C{1} = [2,3; 1,2; 5,4; 8,3; ...]
计算 [2,3]&[1,2] 的点积,然后 [1,2]&[5,4] 然后 [5,4]&[8,3] 等等。
所以最后,我希望得到一个包含 5 个单元格的单元格数组。每个单元格都是一个 [n-1,1] 数组(n 是矩阵的长度)。
dots = [5x1 cell].
dots{1} = [19x1 double];
dots{2} = [22x1 double];
dots{3} = [31x1 double] ...
您可以使用cellfun
计算每个坐标(行)和下一个坐标(行)之间的点积。
dots = cellfun(@(x)dot(x(1:end-1,:), x(2:end, :), 2), C, 'uniform', 0)
说明
我们使用 x(1:end-1,:)
获取第一行进行比较,然后要与 下一个 行 x(2:end,:)
执行点积。在执行点积时,我们要指定我们想要沿第二个维度的点积,因此我们为 dot
.
2
dp = dot(C{1}(1:end-1,:), C{1}(2:end,:), 2);
我们使用 cellfun
对每个元胞数组元素执行此操作。
例子
C = {rand(10,2), rand(20,2), rand(30,2), rand(40, 2), rand(50,2)};
dots = cellfun(@(x)dot(x(1:end-1,:), x(2:end, :), 2), C, 'uniform', 0)
[9x1 double] [19x1 double] [29x1 double] [39x1 double] [49x1 double]