我需要使用数组进行一些计算。我有以下数据:
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 进行尝试,但是我真的不知道如何使用它。
获得该结果的最佳方法是什么?
可能最优雅的方法是先将其转换为numpy数组,然后对其执行条件>= 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)
没有任何图书馆
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)