【发布时间】:2016-08-21 20:11:19
【问题描述】:
背景:我有一个 SFrame,其中包含指示狗图像与其他图像的接近程度的数字。通常狗的图像应该最接近另一个狗的图像,但重点是测试评估方法
我的 SFrame 被称为 dog_distances(1000 行 x 4 列):
dog-automobile dog-bird dog-cat dog-dog
41.9579761457 41.7538647304 36.4196077068 33.4773590373
46.0021331807 41.3382958925 38.8353268874 32.8458495684
42.9462290692 38.6157590853 36.9763410854 35.0397073189
41.6866060048 37.0892269954 34.5750072914 33.9010327697
39.2269664935 38.272288694 34.778824791 37.4849250909
40.5845117698 39.1462089236 35.1171578292 34.945165344
我想写一个函数来检查 dog-dog 是否是最小的数字,并将这个函数应用到整个 SFrame
访问 SFrame 的一行通常会输出一个字典... sframe_name[row#]['column_name']
将 .values() 添加到该行的末尾只会在列表中输出值。 这允许您应用诸如 min() 或 max() 之类的数学方法,这对于创建函数 is_dog_correct 很有用。
因此我的功能是:
def is_dog_correct(row):
#checking if dog-dog is smallest value
if dog_distances[row]['dog-dog'] == min(dog_distances[row].values()):
return 1
else:
return 0
我的函数将 row 作为输入,如果该行的 dog-dog 值等于该行中的最小值,则返回 1。如果不正确,则返回 0。
运行 is_dog_correct(0) 输出 1。我们预计这是因为,正如您在上面看到的,第 0 行的 dog-dog 中的值是该行中的最小值。
运行 is_dog_correct(4) 输出 0。我们预计这是因为第 0 行的 dog-dog 中的值不是该行中的最小值。
所以函数 is_dog_correct 可以在一行一行的基础上完美运行!
当我按照建议在整个 sFrame 上运行时:dog_distances.apply(is_dog_correct)
我得到一个属性错误:
'SFrame' object has no attribute 'values'
请有人解释为什么该函数可以逐行运行,但不能在整个 SFrame 上运行??
【问题讨论】:
标签: python apply graphlab sframe