python-访问给定条件的变量

时间:2015-04-26 18:26:55

标签: python list

我是R用户,因此我习惯使用数据[data $ variable ==' condition',]方式中的条件来使用数据框和访问数据。 我试图在python中编写一个简单的概率神经网络示例。 如果我的数据是:

data = {'o' : [(0.2, 0.5), (0.5, 0.7)],
        'x' : [(0.8, 0.8), (0.4, 0.5)],
        'i' : [(0.8, 0.5), (0.6, 0.3), (0.3, 0.2)]}

我希望对新记录进行分类:

nuevo=(0.2, 0.6)

我设法编写了下面的代码,创建了一个表格(列表列表),每个印刷品都可以看到... ...

kk=[]

def g (data, nuevo):

    for k in data:
        print(k)        
        j=-1
        for i in data[k]:         
            j=j+1
            print(i)        
            print(i[0])
            print(i[1])
            kk.append([k,i,math.e ** (-1 *((nuevo[0] - i[0]) ** 2 + (nuevo[1] - i[1]) ** 2) / ((2 * (0.1 ** 2))))])
            print(kk[j])

g(data, nuevo)

最后我有kk列表列表,我需要选择每个o,x和i的最大值。然后选择具有最大值的那个。

我尝试了类似kk[kk[][0]=='o']的内容,以获取所有具有' o'但是得到了错误的结果。这一定非常简单,但我无法以更简单的方式看到它(我不想使用循环)。

1 个答案:

答案 0 :(得分:0)

您可以使用列表理解

简化您的功能g
def g(d,n):
    return [[k,i,exp(-50*((n[0]-i[0])**2+(n[1]-i[1])**2))] for k in d for i in d[k]]

我敢说使用函数来修改全局数据结构并不总是最好的解决方案......

那就是说,你想为每个类别选择最大接近度,所以

def max_p(d, p):
    return [max((x for x in p if x[0]==k), key=lambda x: x[2]) for k in d]

再次,列表理解(数据字典k中每个键d的列表元素)和新事物,生成器表达式,即部分{ {1}};生成器表达式每次都给出一个元素,即(x for x in p if x[0]==k)内置函数的计算邻近列表中的所有元素。

max函数的第二个参数是一个计算排序键的函数,这里max是一个函数,使用key=lambda x: x[2])语法在现场定义,返回内部索引为2的元素。

lambda

也就是说,您可以更好地向In [49]: data = {'o' : [(0.2, 0.5), (0.5, 0.7)], 'x' : [(0.8, 0.8), (0.4, 0.5)], 'i' : [(0.8, 0.5), (0.6, 0.3), (0.3, 0.2)]} In [50]: nuevo = (0.2, 0.6) In [51]: def g(d,n): return [[k,i,exp(-50*((n[0]-i[0])**2+(n[1]-i[1])**2))] for k in d for i in d[k]] ....: In [52]: def max_p(d, p): return [max((x for x in p if x[0]==k), key=lambda x: x[2]) for k in d] ....: In [53]: max_p(data, g(data, nuevo)) Out[53]: [['i', (0.3, 0.2), 0.00020346836901064417], ['x', (0.4, 0.5), 0.0820849986238988], ['o', (0.2, 0.5), 0.6065306597126335]] In [54]: max(max_p(data, g(data, nuevo)), key=lambda x: x[2]) Out[54]: ['o', (0.2, 0.5), 0.6065306597126335] In [55]: 模块介绍

  1. 引入了真正的数组并定义了数组优化函数和运算符,
  2. 介绍了使用布尔表达式索引数组的机会(也就是你最终想要的......)
  3. 另一个选项是numpy模块,但其他人已经提到过......