[英]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.