检查一个值是否大于另一个值,如果不替换为较小的值 idl 到 python

checking if a value is greater than another and if not replacing with the smaller value idl to python

你好,我正在努力将一些代码从 IDL 切换到 python,这里显示了这个函数:

for i=0l,dim[0]-1 do begin
     for j=0l,dim[1]-1 do begin
        y = reform(image[i,j,0:nchannels-1]) > 0

这实际上是一个列表,其中包含每个通道中包含的所有像素值。改革消除了退化的维度,因此您只有一个来自每个渠道的价值列表。然后,在idl中,>符号和写GT是不一样的。如果使用该符号,它会说要检查列表中的值是否大于 0,如果不是,则只将 0 放在那里。

我知道我可以写一个循环来做到这一点,但我想知道是否有人有任何漂亮的 python 技巧可以在一行中做到这一点。

谢谢!

我想你要找的是numpy.clip()。

import numpy as np
a = np.array([-3,5,9,1,-7,8,-8,-8,1,3,9])
a.clip(0)
# returns: array([0, 5, 9, 1, 0, 8, 0, 0, 1, 3, 9])

它也适用于您的 3D 阵列。