首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2d numpy阵列中行的经验分布

2d numpy阵列中行的经验分布
EN

Stack Overflow用户
提问于 2016-01-28 15:52:05
回答 2查看 138关注 0票数 2

假设我有一个2d的numpy数组A:

代码语言:javascript
复制
A = [[0.3, 0.2],
     [1.0, 0.1],
     [0.3, 0.1],
     [1.0, 0.1]]

我想要的是将A的行映射到它们的经验分布:

代码语言:javascript
复制
f([0.3, 0.2]) = 0.25
f([1.0, 0.1]) = 0.50
f([-12, 140]) = 0.00

有什么好办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-28 17:27:08

我建议使用numpy.allclose。你可以选择一个容忍度,我在这里放1.e-10:

代码语言:javascript
复制
import numpy as np

A = np.array([[0.3, 0.2],[1.0, 0.1],[0.3, 0.1], [1.0, 0.1]])

def f(x,tol=1.e-10):
  l = [np.allclose(x,row,tol) for row in A]
  return l.count(True)/float(A.shape[0])

print f(np.array([0.3,0.2]))
print f(np.array([1.0, 0.1]))
print f(np.array([-12, 140]))
票数 2
EN

Stack Overflow用户

发布于 2016-01-28 16:08:13

下面是基于恶意闭包的方法:

代码语言:javascript
复制
def pdf_maker(A, round_place=10):
    counts = {}
    for i in range(A.shape[0]):
        key = tuple([round(a,round_place) for a in A[i]])
        try:
            counts[key] += 1.0
        except KeyError:
            counts[key] = 1.0

    pdf = {}
    for key in counts:
        pdf[key] = counts[key] / A.shape[0]

    def f_pdf(row):
        key = tuple([round(a,round_place) for a in row])
        try:
            return pdf[key]
        except KeyError:
            return 0.0

    return f_pdf

不过,我肯定有个更干净的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35066029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档