以最有效的方式从数字numpy数组中获取0和1(整数bools)

2024-05-21 03:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有非小的(10^6)numpy数组,然后我对它们进行一些计算。如果值大于某个值X,其中一个函数只返回0,否则返回1。我知道这是一个简单的bool检查的工作:

x = np.arange(100)
x = np.array(x > X, dtype=int)

但是,考虑到我正在创建一个新的数组并进行转换,这看起来非常浪费。有什么办法吗?沿x.round()行的某个值(但该值将返回0或1)。你知道吗

还是我的担心完全没有根据?你知道吗

谢谢! 第

附言:是的,numpy符合要求。你知道吗


Tags: 函数numpynp浪费数组arrayintbool
1条回答
网友
1楼 · 发布于 2024-05-21 03:28:54

通常情况下,您可以通过传递bool数组而不受影响。在对数值数组进行算术运算时,bool数组将根据需要向上转换,将True视为1,将False视为0。你知道吗

但是,如果您真的需要最有效的方法来获得真正的int数组,请使用np.greater()ufunc。与所有ufunc一样,它接受一个out=关键字参数,该参数将用作预先分配的数组,以将结果填充到其中。它将动态转换每个元素,这样就不会创建中间的bool数组。你知道吗

[~]
|1> import numpy as np

[~]
|2> x = np.arange(10)

[~]
|3> output = np.empty(x.shape, dtype=int)

[~]
|4> np.greater(x, 5, out=output)
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1])

[~]
|5> output
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1])

相关问题 更多 >