背景:我有一个 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。我们期望这是因为 dog-dog 中第零行的值不是该行中的最小数字。
所以函数 is_dog_correct 可以在一行一行的基础上完美运行!
当我在整个 sFrame 上按照建议运行时: dog_distances.apply(is_dog_correct)
我收到一个属性错误:
'SFrame' object has no attribute 'values'
请有人解释为什么该函数逐行工作而不是在整个 SFrame 上工作?