如何使ndgrid在MATLAB中使用1维数据?

时间:2015-06-06 18:39:34

标签: matlab matrix is-empty

首先,我找不到更好的标题来描述我的问题,对不起。也许有人可以提出更好的头衔。

我有以下代码:

gridSize = (gridResolution - 1) .* gridStepSize;
positionsVectorY = gridSize(1) / 2 : -gridStepSize(1) : -gridSize(1) / 2;
positionsVectorX = -gridSize(2) / 2 : gridStepSize(2) : gridSize(2) / 2;
[ gridPositionMatrixY, gridPositionMatrixX ] = ndgrid(positionsVectorY, positionsVectorX);

如果gridSize(1)>此代码适合我。 0,gridSize(2)> 0和if gridResolution(1)> 1,gridResolution(2)>但是,如果不是这样,则矩阵/矩阵是空的。例如,[y, x] = ndgrid([], 1 : 3)返回空矩阵:Empty matrix: 0-by-3。在这种情况下我需要的是[y, x] = ndgrid(0, 1 : 3)

所以,我的问题是:更改上述代码以创建所需矩阵的最佳方法是什么?

我只需检查positionsVectorY是否为空并将其替换为零。但我想知道是否有一个更“优雅”的解决方案。

谢谢,

阿德里安

编辑:一个例子:

以下是我的代码工作的示例:

positionsVectorY = 1 : 2;
positionsVectorX = 1 : 3;
[y, x] = ndgrid(positionsVectorY, positionsVectorX)

输出

y =

     1     1     1
     2     2     2


x =

     1     2     3
     1     2     3

这是一个不起作用的特殊情况:如果y方向的分辨率为1,并且y方向的网格大小为0,那么我的代码会生成一个空数组positionsVectorY。然后:

positionsVectorY = []; 
positionsVectorX = 1 : 3;
[y, x] = ndgrid(positionsVectorY, positionsVectorX)

输出结果为:

y =

   Empty matrix: 0-by-3


x =

   Empty matrix: 0-by-3

这不是我想要的,我想要我的代码生成

positionsVectorY = 0;    % instead  of [] 
positionsVectorX = 1 : 3;
[y, x] = ndgrid(positionsVectorY, positionsVectorX)

在这种特殊情况下,输出:

y =

     0     0     0


x =

     1     2     3

我最终想要的是修改我的代码,使其适用于一般情况,但也适用于y或x方向的分辨率可以为1的特殊情况。我的临时解决方案是使用if语句,

if(isempty(positionsVectorY))
    positionsVectorY = 0;
end

if(isempty(positionsVectorX))
    positionsVectorX = 0;
end

但我想删除它们并以更优雅的方式进行。

0 个答案:

没有答案