Python 一行中的平均正数
我有一个numpy矩阵,每一行都有一个正数和负数的组合 我想创建一个新的向量,它给出矩阵中一行中所有正数的平均值 例如,如果这是矩阵: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
[[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是正数吗?