matlab:cellfun逻辑

时间:2012-09-06 10:11:07

标签: matlab bsxfun

我有一个(非常复杂 - 对我而言)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 x 3细胞与mag(大小为81 x 3)相乘。 - >取u {1}的每个元素,并将那些元素与r {2}交叉。 - >将得到的81 x 3细胞与mag(大小为81 x 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更改为像你一样的单元格数组,然后使用cellfun进行多重复制?

还会指出删除mag:

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

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

编辑gunthers评论:

我们只说我有两个对象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}))
 . 
 .
 . 
 .

1 个答案:

答案 0 :(得分:0)

对我来说,检查整个事情并确保结果是正确的有点困难,但是对于第一个近似值,看起来唯一的问题是你的交叉产品因为你正在展平而失败{{1}使用mag使其成为243x1,就像这样

mag(:)

这导致您的>> size(mag(:)) ans = 243 1 >> size(mag) ans = 81 3 产品失败,正如您的错误所示。所以改变的电话是

@times