2

我有一个数组,如果某些元素为负数(可能是任何布尔条件),我想更改它们,但是我也想知道我的代码是否这样做。

目前我有

Mat = #some source
Check = Mat < 0
Check_flag = Check.sum()

if check_flag != 0:
    Mat[Check] = 0 #reset those elements
    logger = logger + '\n This Mat needed to be fixed' #or some over logging method

这可能是最好的方法,但感觉有点“LBYL”而不是pythonic——我通常处理超过1e6个元素的数组——然后循环——所以我有点担心执行检查的性能影响两次(一次是在创建“检查”数组时 - 然后再次在对所有元素求和以查看其中一个是否为“真”时)。

有谁知道这样做更好(更有效)的方法?

4

1 回答 1

3

如果你只想保留元素>=0,你应该使用 np.clip:

np.clip(Mat, 0, np.inf, out=Mat)

另一种更有效的方法是:

Mat[ Mat<0 ] = 0

在这两种情况下,您都将删除该if语句,以防您必须保留它,您可以使用np.anywhich 将返回True,如果其中的任何元素Check具有True值,则避免求和。

Check = Mat<0
if np.any(Check):
    Mat[Check] = 0
    ...
于 2013-08-27T12:14:25.943 回答