我想了解以下代码。在面向对象的部分中,参数之一是one_hot= one_hot
。但是,如果我用extract_labels
调用函数one_hot=one_hot
则不起作用。我必须使用True
和False
语句。有人可以指导我为什么吗?这些True
和False
表示什么。在调用one=True
函数的同时使用extract_label
时,我打印了结果,它打印出一个热矢量。
#Functions
def dense_to_one_hot(labels_dense, num_classes=2):
num_labels = labels_dense.shape[0]
index_offset = numpy.arange(num_labels) * num_classes
labels_one_hot = numpy.zeros((num_labels, num_classes))
labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1
return labels_one_hot
def extract_labels(labels, one_hot=False):
if one_hot :
return dense_to_one_hot(labels)
return labels
#Object oriented part
def read_data_sets(all_width_dir,width_dir, one_hot=False):
class DataSets(object):
pass
data_sets = DataSets()
train_labels = extract_labels(TRAIN_LABELS, one_hot=one_hot)
test_labels = extract_labels(TEST_LABELS, one_hot=one_hot)
return data_sets
train_label = np.load("./Input/1.5/train_label.npy")
labels = extract_labels(train_label, one_hot=one_hot)
print(labels)
答案 0 :(得分:2)
函数extract_labels具有2个参数:
要像one_hot = one_hot一样调用extract_lablels,您需要在之前指定one_hot变量
答案 1 :(得分:1)
当用户调用时,功能read_data_sets()
定义为
def read_data_sets(all_width_dir,width_dir, one_hot=False):
它可能但不需要提供最后一个参数的值,因为它是 keyed参数-带有键one_hot
和默认值{ {1}}。在这两种情况下,参数False
将具有一个值-提供或默认。
现在让我们检查该函数的完整定义的最后两行:
one_hot
这两个函数都调用def read_data_sets(all_width_dir,width_dir, one_hot=False):
class DataSets(object):
pass
data_sets = DataSets()
train_labels = extract_labels(TRAIN_LABELS, one_hot=one_hot)
test_labels = extract_labels(TEST_LABELS, one_hot=one_hot)
函数,并且两个函数都提供具有键名 extract_labels()
的键控参数的值。提供的值是变量 one_hot
的内容-它是(当前定义的)函数one_hot
的参数,正如我在开头提到的,它是具有一定的价值-呼叫者提供的 ,或者默认的一个(read_data_sets()
)。
注意:
有点困惑,在False
参数中,键的名称相同-左侧-右侧的提供的值 )
但是在函数定义之后,i。 e。在模块级别,没有名称为one_hot=one_hot
的变量-该名称在函数定义中是 local 。
因此您可以进行函数调用
one_hot
直接(例如,labels = extract_labels(train_label, one_hot=one_hot)
)或通过变量间接提供键控参数的值,您预先为其分配了一个值(例如,one_hot=True
,然后在函数调用中使用{{ 1}}),或通过完全省略键参数来接受默认值(xyz = True
):
one_hot=xyz