我有一个2D NumPy数组,希望用255.0替换其中大于或等于阈值T的所有值。据我所知,最基本的方法是:
shape = arr.shape
result = np.zeros(shape)
for x in range(0, shape[0]):
for y in range(0, shape[1]):
if arr[x, y] >= T:
result[x, y] = 255
什么是最简洁和Python的方式来做这件事?
有没有一种更快(可能不那么简洁和/或更少的Python)的方法来做到这一点?
这将是人类头部核磁共振扫描窗口/水平调整子程序的一部分。2D numpy数组是图像像素数据。
我认为使用
where
函数可以最快地实现这一点:例如,在numpy数组中查找大于0.2的项并将其替换为0:
因为您实际上需要一个不同的数组,它是
arr
,其中arr < 255
,而255
否则,可以简单地执行以下操作:一般来说,对于下限和/或上限:
如果您只想访问255以上的值,或者更复杂的值,@mtitan8的答案更一般,但是
np.clip
和np.minimum
(或者np.maximum
)对于您的情况来说更好更快:如果您想在适当的地方(即修改
arr
,而不是创建result
),可以使用np.minimum
的out
参数:或者
(由于参数的顺序与函数的定义相同,
out=
名称是可选的。)对于就地修改,布尔索引可以大大加快速度(无需分别创建和修改副本),但仍然不如
minimum
:为了进行比较,如果您想用最小值和最大值来限制您的值,而不使用
clip
,那么您必须执行两次这样的操作,如下所示或者
我认为最快和最简洁的方法都是使用NumPy内置的花式索引。如果有一个名为
arr
的ndarray
元素,则可以使用值x
替换所有元素>255
,如下所示:我用一个500 x 500的随机矩阵在我的机器上运行这个程序,将所有值>;0.5替换为5,平均耗时7.59ms
相关问题 更多 >
编程相关推荐