Python 在numpy数组上为一个条件获取多个结果作为输出

Python 在numpy数组上为一个条件获取多个结果作为输出,python,arrays,numpy,Python,Arrays,Numpy,我正在寻找一种方法,可以为numpy数组的一个条件获得多个结果。 目前,我在同一个numpy数组上运行了两次相同的where条件,以获得两个具有不同输出的新数组 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) 是否存在这样一种可能性:我可以用一个循环填充

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

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)

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

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

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

很少有类似的想法:

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

此外,我还在寻找非阵列输出的解决方案
,您能澄清什么是非阵列输出吗?我不知道有哪种解决方案可以在一个步骤中完成这两个操作,但是,您至少可以通过生成一个
mask=np\u array>=0.5
的布尔掩码,然后将其用于布尔索引来减少计算时间。Q的第二部分:
entries=np.count\u nonzero(np.array>=0.5)
sum\u entries=np.sum(np\u array,其中=np.array>=0.5)@yatu具有非数组输出我指的是输出,其中在具有条件的数组上执行附加操作,只返回单个值。与第二个代码块中的
sum()
类似。
in_ = [np.random.rand(n,n) for n in [10,100,1000,10000,20000]]