1

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

一个二维的例子来澄清。我有

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

它被投影到第一维。得到:

[6;
15;
24]

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

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

然后我会重复一组角度。

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

4

3 回答 3

2

这是一个简单的方法,可以在 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)
于 2013-11-05T12:38:47.157 回答
1

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

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

或者

>> repmat( v/d, [1 d] )
于 2013-11-05T12:24:44.873 回答
1

在 2D 中:

B = sum(A')';

C = diag(B)*(ones(size(A))/size(A,2));

C =    
   2   2   2
   5   5   5
   8   8   8

适应 3D 应该很简单。

于 2013-11-05T12:26:14.480 回答