我试图找到查找/设置3D位置周围所有单元格的最佳方法。这是一种聚类问题。我想聚集一些群体'在几个特定地点附近的细胞。
例如,给定单元格距离为2,(4,4,4)的3D数组和3D位置列表:
(0, 0, 0)
(0, 2, 0)
(3, 0, 0)
假设给定的数组全为零。
我希望返回一个3D阵列,该阵列在距离任何位置2的单元格距离内的所有单元格中都有1个。
因此,距离上述位置2个或更少的任何单元格(包括位置本身)都应该有1个。
我想使用numpy切片而不是Python for循环来提高性能。
以下是输入和输出示例:
distance = 2
shape = (4, 4, 4)
locations = [(2, 0, 0)]
返回应该是:
array([[[1, 1, 1, 0],
[1, 1, 1, 0],
[1, 1, 1, 0],
[0, 0, 0, 0]],
[[1, 1, 1, 0],
[1, 1, 1, 0],
[1, 1, 1, 0],
[0, 0, 0, 0]],
[[1, 1, 1, 0],
[1, 1, 1, 0],
[1, 1, 1, 0],
[0, 0, 0, 0]],
[[1, 1, 1, 0],
[1, 1, 1, 0],
[1, 1, 1, 0],
[0, 0, 0, 0]]], dtype=int32)
基本上,在中心周围形成一个大小为2x2x2的立方体。点(2,0,0)
答案 0 :(得分:1)
这样做你想要的吗?
import numpy as np
distance = 2
shape = (4, 4, 4)
locations = np.array([(2, 0, 0)])
data = np.zeros(shape, np.int)
data[locations[:,0], locations[:,1], locations[:,2]] = 1
import scipy.ndimage
scipy.ndimage.binary_dilation(data, np.ones((3,3,3)), 2)