繁体   English   中英

如何在matlab中寻址立方体(3d阵列)的所有面?

[英]How to address all faces of a cube (3d array) in matlab?

我需要为 3d 框分配边界值。

假设我有z = rand(L,M,N) ,有没有比单独处理所有 6 个面更好的方法来处理这个盒子的所有面, z(:,:,1) , z(:,:,end) , z(:,1,:) , z(:,end,:) , z(1,:,:) , z(end,:,:) ?

这就是我现在所拥有的:

L=3;M=4;N=5;
z = rand(L,M,N);
bv = 0;
z([1,end],:,:) = bv;
z(:,[1,end],:) = bv;
z(:,:,[1,end]) = bv;

我希望能够做类似z(indices) = bv事情。

不确定这是否比您的代码更好,但它是这样的:

%// Data
L = 3;
M = 4;
N = 5;
z = rand(L,M,N)
newValue = 0;

%// Let's go
indL = false(L, 1, 1);
indM = false(1, M, 1);
indN = false(1, 1, N);
indL([1 end]) = true;
indM([1 end]) = true;
indN([1 end]) = true;
ind = bsxfun(@or, bsxfun(@or, indL, indM), indN); %// linear index of all faces
z(ind) = newValue

前:

z(:,:,1) =
    0.2653    0.7302    0.1078    0.8178
    0.8244    0.3439    0.9063    0.2607
    0.9827    0.5841    0.8797    0.5944
z(:,:,2) =
    0.0225    0.1615    0.0942    0.6959
    0.4253    0.1788    0.5985    0.6999
    0.3127    0.4229    0.4709    0.6385
z(:,:,3) =
    0.0336    0.5309    0.8200    0.5313
    0.0688    0.6544    0.7184    0.3251
    0.3196    0.4076    0.9686    0.1056
z(:,:,4) =
    0.6110    0.0908    0.2810    0.4574
    0.7788    0.2665    0.4401    0.8754
    0.4235    0.1537    0.5271    0.5181
z(:,:,5) =
    0.9436    0.2407    0.6718    0.2548
    0.6377    0.6761    0.6951    0.2240
    0.9577    0.2891    0.0680    0.6678

后:

z(:,:,1) =
     0     0     0     0
     0     0     0     0
     0     0     0     0
z(:,:,2) =
         0         0         0         0
         0    0.1788    0.5985         0
         0         0         0         0
z(:,:,3) =
         0         0         0         0
         0    0.6544    0.7184         0
         0         0         0         0
z(:,:,4) =
         0         0         0         0
         0    0.2665    0.4401         0
         0         0         0         0
z(:,:,5) =
     0     0     0     0
     0     0     0     0
     0     0     0     0

如果您有图像处理工具箱,则使用padarray会起作用:

z = padarray(z(2:end-1,2:end-1,2:end-1), [1 1 1], bv);

这只需要立方体的内部块并在所有边上添加 1 个bv副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM