【问题标题】:Matlab vector expansionMatlab向量扩展
【发布时间】:2013-11-05 12:15:32
【问题描述】:

我有一个 1-D 矢量,需要将其“取消投影”(抱歉,我不知道如何告诉它)到 3D 空间。是否有避免循环的内置函数?

需要说明的 2D 示例。我有

[1 2 3;
 4 5 6;
 7 8 9]

它已被投影到第一个维度。得到:

[6;
15;
24]

现在我需要“去投影”它并得到:

[2 2 2;
 5 5 5;
 8 8 8] 

然后我会重复一组角度。

这类似于 Radon 变换,但为 3D。那么我们是否有一个函数可以在 3D 空间中进行这种动作,并且(如果我幸运的话)可以用于感兴趣轴的任意角度。 谢谢。

【问题讨论】:

    标签: matlab vector transform projection expansion


    【解决方案1】:

    这里有一个简单的方法来为这个向量在 3D 中完成它:

    v = [6;15;24];
    
    repmat(v, [1 3 3])/9
    

    一种通用的解决方案,可以使用您的requiredDimensions 将任何矢量取消投影到形状中:

    v = [6;15;24];
    requiredDimensions = 3;
    
    n = numel(v);
    myDims = [1 repmat(n,1,requiredDimensions - 1)];
    repmat(v, myDims )/prod(myDims)
    

    【讨论】:

    • myDims 的当前结构假设您希望所有内容都是“方形”的,但应该不难适应您的需求。
    【解决方案2】:

    有几种方法可以做到这一点。
    v 成为“投影向量”(在您的示例中为v = [6;15;24;]),并让d 成为所需的列数(在您的示例中为d = 3),然后:

    >> v * ones( 1, d ) / d
    

    或者

    >> repmat( v/d, [1 d] )
    

    【讨论】:

      【解决方案3】:

      在 2D 中:

      B = sum(A')';
      
      C = diag(B)*(ones(size(A))/size(A,2));
      
      C =    
         2   2   2
         5   5   5
         8   8   8
      

      适应 3D 应该很简单。

      【讨论】:

        猜你喜欢
        • 2014-07-14
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-26
        • 2013-09-26
        • 1970-01-01
        • 2013-02-24
        相关资源
        最近更新 更多