python - 更改 map 表达式中的功能的建议

标签 python function numpy

我想知道是否有更简洁的方法来执行以下操作:

htr是numpy数组时,我想做如下操作:

hL, tL, rL = map(lambda m: len(set(m)), [h, t, r])

计算单个数组中非重复项的数量。但是,lambda 表达式像拇指一样突出。如果不重复的事情不是问题,我会写:

hL, tL, rL = map(len, [h, t, r])

这太酷了。我们已经完全放弃了 lambda 表达式。接触 Haskell 几个月后,我真的开始相信 Python 应该能够在 Haskell 中提供像 . 这样的链接运算符,以便第一个表达式可以简单地简化为以下内容:

hL, tL, rL = map(len . set, [h, t, r])

哪个更好!!

我看到一些使用 reduce 方法来执行此操作的东西,但这比以前的方法更难看。我想知道是否有人知道可以解决问题的东西?我知道非严格评估存在一些问题,可能会使程序不稳定,但是当我们处理像这样的简单事情时,这不应该成为问题吗?

最佳答案

要计算 numpy 数组中唯一元素的数量,您可以使用 unique(x).sizelen(unique(x))(参见 numpy.unique) .如果你真的想让三个长度的计算成为“一行”,你可以这样写:

hL, tL, rL = [len(unique(x)) for x in h, t, r]

以防万一:对于中型到大型数组,unique(x) 可能比 set(x) 快很多,但对于小型数组,set(x) 更快。 (我还没有探索各种数组大小和数据类型的性能,所以我将保留“大”和“小”未定义。自己测试——但前提是这段代码是性能瓶颈。)

关于python - 更改 map 表达式中的功能的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396407/

相关文章:

javascript - 按钮点击计时器

python - n维表查找: array,数据帧,还是字典?

python - sympy diff 给了我意想不到的结果

python - Linux shell 命令未按预期执行

javascript - If 语句显示图像

c++ - 无法将 <int*, std::vector<int>>’ 转换为 ‘int*'

python - 查看 Python Pandas 相关矩阵条目的常见观察计数的快速方法

python - 如何创建 `numpy.array` 的 c 函数?

python - 920 HTTP 响应

python - 为什么只有一行导出到excel?