2

我有非小 (10^6) numpy 数组,然后我对其进行一些计算。如果值大于某个值 X,则其中一个函数仅返回 0,否则返回 1。我理解这是一个简单的布尔检查来完成这项工作:

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

但是,鉴于我正在创建一个新数组并进行转换,这似乎非常浪费。关于如何就地做的任何想法?类似于 x.round() 的东西(但会返回 0 或 1)。

还是我的担忧完全没有根据?

谢谢!磷

PS:是的,numpy 是作为要求。

4

1 回答 1

5

很多时候,你可以绕过bool数组来逃避。当用于数值数组的算术运算时,bool数组将根据需要向上转换,将Trueas1Falseas处理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])
于 2013-07-22T14:03:54.687 回答