Python Numpy:如何获得数组中特定数字的频率分数

时间:2017-03-17 00:44:39

标签: python arrays numpy

我正在尝试在数组的特定行或列中找到一部分,并创建这些分数的新数组。

到目前为止,我有:

def calc_frac(a,axis=0):
    """a function that returns the fraction of ones in each column or row"""
    s=np.array(((a==1).sum())/len(a))
    return(s)

并且当我们的测试值应该为真时,我的所有测试值都会返回false

1 个答案:

答案 0 :(得分:0)

如果数组中没有缺失值,则只需在mean逻辑数组上调用a == 1方法,该方法返回1的小数:

a = np.array([[1,2,3,1], [1,1,1,1], [1,0,2,2], [2,2,1,1]])
a
#array([[1, 2, 3, 1],
#       [1, 1, 1, 1],
#       [1, 0, 2, 2],
#       [2, 2, 1, 1]])

1)每列1s的分数

(a == 1).mean(0)
# array([ 0.75,  0.25,  0.5 ,  0.75])

2)每行1分的分数

(a == 1).mean(1)
# array([ 0.5 ,  1.  ,  0.25,  0.5 ])

如果nan计为条目,则上述方法仍然有效;如果nan不计入条目,您可以按照以下方式处理nan

(a == 1).sum(axis)/(~np.isnan(a)).sum(axis)

其中 axis = 0 ,每列分数; 轴= 1 ,每行分数。