Python 一行中的平均正数

Python 一行中的平均正数,python,math,numpy,matrix,Python,Math,Numpy,Matrix,我有一个numpy矩阵,每一行都有一个正数和负数的组合 我想创建一个新的向量,它给出矩阵中一行中所有正数的平均值 例如,如果这是矩阵: [[1 2 3 -1] [2 5 -6 5]] 我想用以下值创建向量: [[2] [4]] 最快的方法是什么 总是会有正数。如果保证每行至少有一个正数(>=0),您可以将负数(不包括0)转换为NaNs,然后沿行使用,如下所示- np.nanmean(np.where(A>=0,A,np.nan),axis=1) 样本运行- In [69]: A

我有一个numpy矩阵,每一行都有一个正数和负数的组合

我想创建一个新的向量,它给出矩阵中一行中所有正数的平均值

例如,如果这是矩阵:

[[1 2 3 -1]

[2 5 -6 5]]
我想用以下值创建向量:

[[2]

[4]]
最快的方法是什么


总是会有正数。

如果保证每行至少有一个正数
(>=0)
,您可以将
负数(不包括0)
转换为
NaNs
,然后沿行使用,如下所示-

np.nanmean(np.where(A>=0,A,np.nan),axis=1)
样本运行-

In [69]: A
Out[69]: 
array([[ 2,  3, -6, -6, -4],
       [-5, -6, -1, -1,  3],
       [-8,  5, -7, -9, -9],
       [-3,  0,  7, -5, -6]])

In [70]: np.nanmean(np.where(A>=0,A,np.nan),axis=1)
Out[70]: array([ 2.5,  3. ,  5. ,  3.5])

如果保证每行至少有一个正数
(>=0)
,则可以将
负数(不包括0)
转换为
NaNs
,然后沿行使用,如下所示-

np.nanmean(np.where(A>=0,A,np.nan),axis=1)
样本运行-

In [69]: A
Out[69]: 
array([[ 2,  3, -6, -6, -4],
       [-5, -6, -1, -1,  3],
       [-8,  5, -7, -9, -9],
       [-3,  0,  7, -5, -6]])

In [70]: np.nanmean(np.where(A>=0,A,np.nan),axis=1)
Out[70]: array([ 2.5,  3. ,  5. ,  3.5])

一个可能的解决办法是

  • 选择所有非负数
  • 将平均值显式计算为总和/计数
代码:

notneg = x >= 0
result = (x * notneg).sum(1) / notneg.sum(1)

一个可能的解决办法是

  • 选择所有非负数
  • 将平均值显式计算为总和/计数
代码:

notneg = x >= 0
result = (x * notneg).sum(1) / notneg.sum(1)

如果一行中没有正数怎么办?那么平均值是多少?@Divakar总是有正数。另外,您是否将
0
视为正数?输入数组中可能有零吗?@Divakar是的,零是可能的。那么,您是否认为0是正数?如果一行中没有正数怎么办?那么平均值是多少?@Divakar总是有正数。另外,您是否将
0
视为正数?输入数组中可能有零吗?@Divakar是的,零是可能的。那么,你认为0是正数吗?