相关疑难解决方法(0)

如何将整数钳位到某个范围?

我有以下代码:

new_index = index + offset
if new_index < 0:
    new_index = 0
if new_index >= len(mylist):
    new_index = len(mylist) - 1
return mylist[new_index]
Run Code Online (Sandbox Code Playgroud)

基本上,我计算一个新索引并使用它来从列表中查找一些元素.为了确保索引在列表的边界内,我需要将这两个if语句写成4行.那是相当冗长,有点难看......我敢说,这是非常不科幻的.

还有其他更简单,更紧凑的解决方案吗?(和更多pythonic)

是的,我知道我可以if else在一行中使用,但它不可读:

new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
Run Code Online (Sandbox Code Playgroud)

我也知道我可以链max()min()在一起.它更紧凑,但我觉得它有点模糊,如果我输错了就更难找到错误.换句话说,我觉得这很简单.

new_index = max(0, min(new_index, len(mylist)-1))
Run Code Online (Sandbox Code Playgroud)

python clamp

81
推荐指数
8
解决办法
8万
查看次数

将高于和低于阈值的列表值替换为Python中的默认值?

我正在尝试用默认值替换低于和高于阈值的“坏值”(例如将它们设置为 NaN)。 \n我正在取消具有 1000k 值及更多值的 numpy 数组 - 因此性能是一个问题。

\n\n

我的原型分两步进行操作,是否可以一步完成此操作?

\n\n
import numpy as np\n\ndata = np.array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])\n\nupper_threshold = 7\nlower_threshold = 1\ndefault_value = np.NaN\n\n# is it possible to do this in one expression?\ndata[data > upper_threshold] = default_value\ndata[data < lower_threshold] = default_value\n\nprint data # [ nan   1.   2.   3.   4.   5.   6.   7.  nan  nan]\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如这个相关问题中所评论的(用上限和下限替换列表值的Pythonic way(钳制、剪裁、阈值处理)?

\n\n
\n

与许多其他函数一样,np.clip 是 python 的,但它遵循 arr.clip 方法。对于常规数组,该方法是编译的,因此速度会更快(大约 2 倍)。\xe2\x80\x93 hpaulj

\n …

python numpy

5
推荐指数
1
解决办法
5887
查看次数

标签 统计

python ×2

clamp ×1

numpy ×1