gpt4 book ai didi

matlab - 两个元胞数组之间的叉积

转载 作者:行者123 更新时间:2023-12-02 09:31:12 31 4
gpt4 key购买 nike

我有以下两个向量场:

>> orient

orient =

[1x3 double] [1x3 double] [1x3 double]
[1x3 double] [1x3 double] [1x3 double]
[1x3 double] [1x3 double] [1x3 double]

>> distance

distance =

[1x3 double] [1x3 double] [1x3 double]
[1x3 double] [1x3 double] [1x3 double]
[1x3 double] [1x3 double] [1x3 double]

我需要计算成对元素的叉积,即

b = (cross(orient{1,1},distance{1,1}) + cross(orient{1,2},distance{1,2})..... and so on

然后 reshape 形状以匹配距离和方向的尺寸。

我可以在不使用 for 循环的情况下完成此操作吗?

如果我有呢

orient{1,1} = 

[1x3 double]

distance =

[1x3 double] [1x3 double] [1x3 double]
[1x3 double] [1x3 double] [1x3 double]
[1x3 double] [1x3 double] [1x3 double]

我该怎么办

sum1 = (交叉(东方{1,1},距离{1,1}) + 交叉(东方{1,1},距离{1,2}) +...)sum2 = (交叉(东方{1,2},距离{1,1}) + 交叉(东方{1,2},距离{1,2}) +...)

其中每个“和”只是单个方向元素的迭代,与所有距离元素交叉,然后对这些叉积求和。然后我会:

mastersum = sum1 sum2 sum3
sum4 sum5 sum6
sum6 sum8 sum9

哪里

sum1 = 

[1x3 double]

我只是以一种令人困惑的方式表达这一点吗?

最佳答案

您需要使用cellfun无需 for 循环即可遍历元胞数组。

对于两个向量场(两个元胞数组),您应该这样做:

crosses = cellfun(@(u, v)cross(u, v)', orient, distance, 'UniformOutput', 0);
b = sum(cell2mat({crosses{:}})', 1) %# Summing all vectors in all cells

对于来自 orient 的单个细胞(例如 orient{1, 2})的类似过程将是:

u = orient{1, 2};
crosses = cellfun(@(v)cross(u, v)', distance, 'UniformOutput', 0);
b = sum(cell2mat({crosses{:}})', 1) %# This command remains the same

要在没有 for 循环的情况下从 orient 获取所有向量的结果,请改为:

b_func = @(u)sum(cell2mat(cellfun(@(v)cross(u,v)', {distance{:}}, 'Un', 0))', 1);
U = cellfun(b_func, orient, 'UniformOutput', 0)

现在 U 也是一个元胞数组(与 orient 具有相同的维度):U{1, 1} 的总和为十字代表 orient{1, 1}U{1, 2} 代表 orient{1, 2},依此类推...

关于matlab - 两个元胞数组之间的叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11537599/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com