Python 以最有效的方式从数值numpy数组中获取0和1(整数布尔值)
我有非小的(10^6)numpy数组,然后我对它们进行一些计算。如果值大于某个值X,其中一个函数只返回0,否则返回1。我理解这一点,一个简单的布尔检查就可以做到:Python 以最有效的方式从数值numpy数组中获取0和1(整数布尔值),python,numpy,Python,Numpy,我有非小的(10^6)numpy数组,然后我对它们进行一些计算。如果值大于某个值X,其中一个函数只返回0,否则返回1。我理解这一点,一个简单的布尔检查就可以做到: x = np.arange(100) x = np.array(x > X, dtype=int) 然而,考虑到我正在创建一个新数组并进行转换,这似乎是非常浪费的。你有什么想法吗?沿x.round()行的内容(但返回0或1) 还是我的担心完全没有根据 谢谢! P PS:是的,numpy是必需的。非常频繁,你可以绕过bool数组
x = np.arange(100)
x = np.array(x > X, dtype=int)
然而,考虑到我正在创建一个新数组并进行转换,这似乎是非常浪费的。你有什么想法吗?沿x.round()行的内容(但返回0或1)
还是我的担心完全没有根据
谢谢!
P
PS:是的,numpy是必需的。非常频繁,你可以绕过
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])
你退房了吗?其实以前没看到,谢谢。但我真的很想在numpy内做到这一点。已经有一个np数组,所以在制作列表中没有意义。这似乎是我想要的。我甚至可以做一个“np.greater(x,5,out=x)”,只保留一个数组。谢谢