Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以最有效的方式从数值numpy数组中获取0和1(整数布尔值)_Python_Numpy - Fatal编程技术网

Python 以最有效的方式从数值numpy数组中获取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数组

我有非小的(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
数组。在对数值数组进行算术运算时,
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)”,只保留一个数组。谢谢