【问题标题】:bsxfun implementation in solving a min. optimization taskbsxfun 在解决一分钟。优化任务
【发布时间】:2014-08-02 13:52:49
【问题描述】:

我真的需要这方面的帮助。

我必须矩阵 L1L2,它们的大小都是 (500x3)

首先,我计算L1的每一列的每个元素与L2的差值如下:

lib1 = bsxfun(@minus, L1(:,1)',L2(:,1));
lib1=lib1(:);
lib2 = bsxfun(@minus, L1(:,2)',L2(:,2));
lib2=lib2(:);
lib3 = bsxfun(@minus, L1(:,3)',L2(:,3));
lib3=lib3(:);
LBR = [lib1 lib2 lib3];

结果是这个矩阵LBR。然后我有一个min-问题要解决:

[d,p] = min((LBR(:,1) - var1).^2 + (LBR(:,2) - var2).^2 + (LBR(:,3) - var3).^2);

它返回点p,在此min-问题得到满足。最后我可以回到我的矩阵L1L2 来找到满足min 问题的值的索引位置。我这样做如下:

[minindex_alongL2, minindex_alongL1] = ind2sub(size(L1),p);

没关系。但我现在需要的是:

我要相乘,取一个叫alpha的向量的tensor-product,也叫Kronecker productLBRalpha给出如下:

alpha = 0:0.1:2;

而且,这个Kronecker product 我计算如下:

val = bsxfun(@times,LBR,permute(alpha,[3 1 2]));
LBR = reshape(permute(val,[1 3 2]),size(val,1)*size(val,3),[]);

我现在需要的是:我需要解决同样的问题minproblem:

[d,p] = min((LBR(:,1) - var1).^2 + (LBR(:,2) - var2).^2 + (LBR(:,3) - var3).^2);

但是,这一次,除了从满足min问题的L1L2中找到索引位置和值之外,我还需要找到单的索引位置 来自alpha 向量的值,该向量已相乘并满足min 问题。我不知道我该怎么做,所以非常感谢任何帮助!

提前致谢!

Ps:如果需要,我可以发布 L1L2 矩阵。

【问题讨论】:

    标签: matlab min matrix-multiplication bsxfun


    【解决方案1】:

    我相信您需要在代码中进行此更正 -

    [minindex_alongL2, minindex_alongL1] = ind2sub([size(L2,1) size(L1,1)],p)
    

    对于解决方案,您需要将p的大小添加到最后一步的索引查找中,因为计算min的向量具有alpha的“附加影响”-

    [minindex_alongL2, minindex_alongL1,minindex_alongalpha] = ind2sub([size(L2,1) size(L1,1) numel(alpha)],p)
    

    minindex_alongalpha 可能会引起您的兴趣。

    【讨论】:

    • 嗨@Divakar,我明天会试试你的建议。非常感谢您的帮助...再次:D
    • @SergioHaram 告诉我进展如何! :)
    • 很抱歉我不得不尝试您的建议,当然没有必要这样做,您的代码运行良好! :D 我实际上已经尝试了ind2subalpha 的许多变体,但我没想到我应该使用numel,这是为什么呢?为什么size(alpha) 不起作用?而且,非常抱歉,我只能给你一票! :)
    • @SergioHaram 因为alpha 是一个行向量,所以size(alpha,2) 将代替numel(alpha) 起作用。正如我之前所说,我很高兴回答关于 bsxfun 的任何问题 :) 所以请继续关注!
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多