首先,我找不到更好的标题来描述我的问题,对不起。也许有人可以提出更好的头衔。
我有以下代码:
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
但我想删除它们并以更优雅的方式进行。