matlab: cellfun logic



我有一个(对我来说非常复杂)cellfun操作,我需要一个聪明的头脑来观察它,以判断是否真的在做我想要做的事情:

b = cellfun(@(x) nansum(bsxfun(@times, mag(:),cross(u{1},x))),r,'UniformOutput',false);
 size(mag)
ans =
    81     3
 size(u{1})
ans =
    81     3
size(r)
ans =
     1    81

u和r是单元阵列。我需要的算法:

->取u{1}的每个元素,并将它们与r{1}的每个元素进行叉积。->将得到的81×3单元与mag(大小81×3)相乘。->取u{1}的每个元素,并将它们与r{2}的每一个元素进行叉积。->将得到的81×3单元与mag(大小81×3)相乘。

等等…

我得到以下错误:

??? Error using ==> bsxfun
Non-singleton dimensions of the two input arrays must match each other.
Error in ==> cellcross>@(x)nansum(bsxfun(@times,mag(:),cross(u{1},x))) at 2
    b = cellfun(@(x) nansum(bsxfun(@times, mag(:),cross(u{1},x))),r,'UniformOutput',false);
Error in ==> cellcross at 2
    b = cellfun(@(x) nansum(bsxfun(@times, mag(:),cross(u{1},x))),r,'UniformOutput',false);

我的逻辑哪里失灵了?将mag更改为单元阵列(如u),然后使用cellfun进行多重复制会更容易吗?

还将指出,删除mag:

b = cellfun(@(x) nansum(cross(u{1},x)),r,'UniformOutput',false);

工作如预期,因此将结果乘以u.是一个问题

编辑枪手评论:

假设我有两个对象u和r,它们都是细胞

u =
1 1 0              1st element
2 2 0              2nd element
3 3 0              3rd element
r =
3 3 0
2 2 0
1 1 0

我想做的就是:

cross(u{1},r{1})

=交叉([1 1 0],[3,3,0])+交叉([2 2 0],[2,2,0])=交叉([3 3 0],[1,1,0])

然后重复:

 sum(cross(u{1},r{2}))
 sum(cross(u{1},r{3}))
 . 
 .
 . 
 .

对我来说,检查整件事并确保结果正确有点困难,但从第一个近似值来看,唯一的问题是你的叉积失败了,因为你使用mag(:)mag压平,使其为243x1,就像一样

>> size(mag(:))
ans =
243     1
>> size(mag)
ans =
81     3

这导致您的@times产品出现故障,正如您的错误所示。所以更改后的呼叫是

cellfun(@(x) nansum(bsxfun(@times, mag,cross(u{1},x))),r,'UniformOutput',false)

相关内容

  • 没有找到相关文章

最新更新