如何基于两个向量定义的尺寸分配适配2D/3D的数组
适配2D/3D场景的零数组创建优化
需求说明
需要创建一个由向量定义尺寸的零数组,同时适配2D和3D场景,替代原有的条件判断分支,实现更简洁的维度自适应代码。
原有实现代码
原代码通过if-else分别处理2D和3D情况:
%% Setting in 2D % rectangular domain with left bottom corner [_1,_2] % and right top corner [_1,_2] lb_corner=[-1,-2] rt_corner=[2,2] domain_size=rt_corner - lb_corner; dim=size(domain_size,2); nb_pixels=[5,4]; % number of pixels in [x_1,x_2] %% Mesh parameters pixel_size= domain_size./nb_pixels; %% Coordinates if dim == 2 x_coords=zeros(nb_pixels(1),nb_pixels(2),dim); elseif dim == 3 x_coords=zeros(nb_pixels(1),nb_pixels(2),nb_pixels(3),dim); end
3D场景的参数设置:
%% Setting in 3D lb_corner = [-2,-2,-2] rt_corner = [2,2,2] domain_size=rt_corner - lb_corner; dim=size(domain_size,2); nb_pixels=[5,4,5]; % number of pixels in [x_1,x_2,x_3]
优化方案
直接将nb_pixels与dim拼接成一个维度向量,作为zeros函数的输入参数,即可自动适配2D/3D场景:
x_coords = zeros([nb_pixels, dim]);
原理说明
- 2D场景下,
nb_pixels为[5,4],dim=2,拼接后维度向量为[5,4,2],zeros会生成尺寸为5×4×2的数组,与原2D分支的输出一致。 - 3D场景下,
nb_pixels为[5,4,5],dim=3,拼接后维度向量为[5,4,5,3],zeros会生成尺寸为5×4×5×3的数组,与原3D分支的输出一致。
内容的提问来源于stack exchange,提问作者Martin Ladecký
相关产品推荐
相关产品推荐

