2

我正在寻找一种方法来为 numpy 数组的一个条件获取多个结果。目前,我在同where 一个 numpy 数组上运行了两次相同的条件,以获得两个具有不同输出的新数组。

import numpy as np
np_array = np.random.rand(3,3)
entry_array = np.where(np_array>=0.5,1,0)
mod_array = np.where(np_array>=0.5,np_array,0)

entries, mod_array是否存在一种可能性,我可以只用一个循环来填充两个新数组np_array。此外,我还在寻找非数组输出的解决方案,如下所示。

entries = np.where(np_array>=0,1,0).sum()
sum_entries = np.where(np_array>=0,np_array,0).sum()

我对一种有效的方法特别感兴趣,因为我的数组有超过 1 亿个条目。

4

1 回答 1

0

很少有类似的想法:

def m1(np_array):
  entry_array = np.where(np_array>=0.5,1,0)
  mod_array = np.where(np_array>=0.5,np_array,0)
  return mod_array, entry_array

def m2(np_array):
  mod_array = np.where(np_array>=0.5,np_array,0)
  entry_array = np.array(mod_array, dtype=bool)+0
  return mod_array, entry_array

def m3(np_array):
  entry_array = np_array<0.5
  np_array[entry_array] = 0
  return np_array, 1-entry_array

比较:m1似乎比m2m3稍慢(最多 2 倍)。

in_ = [np.random.rand(n,n) for n in [10,100,1000,10000,20000]]

在此处输入图像描述

于 2020-07-21T10:04:13.870 回答