从数组中提取正值和负值的计数

Ben*_*pop 3 python list count

我需要使用数组进行一些计算。我有以下数据:

x = [[81, 68, 71, 71, 67, -72], [79, 77, 88, 88, 59, -71], [67, 71, 68, 68, 85, -66]]
Run Code Online (Sandbox Code Playgroud)

我需要处理数据并从每一列中提取正值和负值的数量,因此输出应为:

positive_value = [3,3,3,3,0]
negative_vaue = [0,0,0,0,3]
Run Code Online (Sandbox Code Playgroud)

我尝试使用for没有成功的循环以及Numpy 进行尝试,但是我真的不知道如何使用它。

获得该结果的最佳方法是什么?

Wil*_*sem 9

可能最优雅的方法是先将其转换为数组,然后对其执行条件>= 0,然后计算sum(..)第一个轴的:

import numpy as np

np.sum(np.array(x) >= 0, axis=0)
Run Code Online (Sandbox Code Playgroud)

然后产生:

>>> np.sum(np.array(x) >= 0, axis=0)
array([3, 3, 3, 3, 3, 0])
Run Code Online (Sandbox Code Playgroud)

因此,通过使用np.array(x) >= 0,我们获得布尔的二维数组:

>>> np.array(X) >= 0
array([[ True,  True,  True,  True,  True, False],
       [ True,  True,  True,  True,  True, False],
       [ True,  True,  True,  True,  True, False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

由于通过True计算False每列的总和计为1和0,因此我们计算了正数。

如果您要计算严格的正数(因此只能大于零),则应省略=in >=

>>> np.sum(np.array(x) > 0, axis=0)
array([3, 3, 3, 3, 3, 0])
Run Code Online (Sandbox Code Playgroud)


spl*_*h58 5

没有任何图书馆

pos = [ sum(y>=0 for y in x)  for x in zip(*mylist) ]
neg = [ len(mylist)-x for x in pos]
print(pos, neg)
Run Code Online (Sandbox Code Playgroud)

演示