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

新手上路,请多包涵

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

 x = [[81, 68, 71, 71, 67, -72], [79, 77, 88, 88, 59, -71], [67, 71, 68, 68, 85, -66]]

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

 positive_value = [3,3,3,3,0]
negative_vaue = [0,0,0,0,3]

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

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

原文由 Ben2pop 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 828
2 个回答

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

 import numpy as np

np.sum(np.array(x) >= 0, axis=0)

这然后产生:

 >>> np.sum(np.array(x) >= 0, axis=0)
array([3, 3, 3, 3, 3, 0])

因此,通过使用 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)

由于 True 计为一,而 False 为零,通过计算每列的总和,我们因此计算正数的数量。

如果你想 严格 计算正数(所以只大于零),你应该省略 =>=

 >>> np.sum(np.array(x) > 0, axis=0)
array([3, 3, 3, 3, 3, 0])

原文由 Willem Van Onsem 发布,翻译遵循 CC BY-SA 3.0 许可协议

没有任何图书馆

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

演示

原文由 splash58 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题