我需要訪問3D中某個點周圍的多個索引。 例如,對於點(x1,y1,z1),我需要獲取其3x3x3鄰域的所有索引,使得(x1,y1,z1)居中。對於大小爲3的附近,我避免sub2ind,ind2sub matlab
[x,y,z] = meshgrid(-1:1,-1:1,-1:1);
x_neighbors = bsxfun(@plus,x,x1);
y_neighbors = bsxfun(@plus,y,y1);
z_neighbors = bsxfun(@plus,z,z1);
這裏做到這一點,我在加入從(X1,Y1,Z1)的距離,以任何點中心X1,Y1,Z1到(0,0,0) 3x3x3盒子。
給出了(x1,y1,z1)3x3x3鄰域的座標。然後我需要把它們變成線性指標,所以我可以訪問它們:
lin_ind = sub2ind(size(volume),y_neighbors,x_neighbors,z_neighbors);
這是我做的成本很高。
我的問題是,如何避免sub2ind。如果INX的(X1,Y1,Z1)的線性指標,
inx = sub2ind(size(volume),y1,x1,z1);
我怎麼能找到通過增加或減少或INX公司的任何其他操作簡單的線性指標的3x3x3的鄰里關係?
爲什麼你需要線性索引?你在做什麼操作?難道你不能像M(x_neighbors,y_neighbors,z_neighbors)那樣得到鄰居嗎?你也可以只做到這一點,而不是meshgrid等:'M(x_neighbors-1:x_neighbors + 1,y_neighbors-1:y_neighbors + ... etc' – Dan 2013-04-22 10:04:59
你可以永遠做'陣列(1 +行* J +行*的cols * K)計算的'型自己......只要看看sub2ind'如何'做它和相關部分複製粘貼。 – 2013-04-22 10:09:55
@丹,無法訪問M(y_n,x_n,z_n),因爲我只需要部分在3x3x3的鄰居,(我申請的指數口罩),所以我其實已經是x_list,y_list,z_list和訪問M(y_list,x_list,z_list)給出了y_list,x_list,z_list所有位置,而不是它們的組合。 ......我不能用你的其他建議,因爲我有很多點(P1,... PN),而不是隻有一個(X1,Y1,Z1),我需要做快.. – matlabit 2013-04-22 10:14:21