作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下两个向量场:
>> 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/
我是一名优秀的程序员,十分优秀!