【发布时间】:2015-07-05 01:51:38
【问题描述】:
我是 R 用户,所以我习惯于使用数据框访问数据,使用 data[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”的元素,但我得到了错误的结果。这一定很简单,但我无法以更简单的方式看到它(我不想使用循环)。
【问题讨论】:
-
Python 的内置结构不是这样设置的。它们不强制执行表格结构,因此 Python 不知道或关心结构中的所有“列”是否甚至具有相同的长度。同样,矢量化操作(没有循环)是不可能的,因为不要求您存储的所有值都具有相同的类型。如果你想做 R 风格的东西,我建议你看看 pandas 库,它提供了类似于 R 的向量和数据帧的数据结构。
-
好的,谢谢。但是如果你必须用基础来解决它,你会怎么做呢?也许利用形成 kk 列表的循环?
-
@GabrielaPlantie 你也许可以使用list comprehensions 来获得你想要的东西。简单示例:
[x for x in range(100) if x % 2 == 0] -
我不完全确定您要做什么。如果要过滤列表以仅获取满足某个谓词的值,可以使用
filter函数。 -
@GabrielaPlantie:没有循环的基础知识是做不到的。