使用 yield 打印输出
using yield print output
这是 的延续。
我正在使用 yield
语句而不是 return
。
这是代码:
class Measurements():
def __init__(self, value, other):
self.value = value
self.other = other
class Criteria():
def __init__(self, new_value, measurements):
self.new_value = new_value
self.measurements = measurements
def method(self):
for measurement in self.measurements:
if 20 < measurement.value < 110:
measurement.value = self.new_value
return self.measurements
class Evaluate():
def __init__(self, criteria):
self.criteria = criteria
def execute(self):
for c in self.criteria:
c.method()
yield c.measurements
def main():
criteria = [
Criteria(999, [Measurements(100, 0.3), Measurements(33, 0.5)]),
Criteria(999, [Measurements(150, 0.3), Measurements(35, 0.5)]),
]
compare = [
Measurements(999, 0.3), Measurements(999, 0.5),
Measurements(100, 0.3), Measurements(999, 0.5)
]
obs = Evaluate(criteria).execute()
# here compare
if __name__ == "__main__":
main()
我想将 obs
中的输出值与 compare
中的值进行比较。我指的是 Measurements
部分。
所以,从 obs
,我们有(对于 运行 代码之后的变量值):999,999,150,999
(因为如果 20
从compare
我们有:999,999,100,999
仍然不确定您要执行哪些检查,但这里有一个示例可以帮助您入门。进行了一些更改
# Made compare a list contain lists of Measurements to match criteria
compare = [
[Measurements(999, 0.3), Measurements(999, 0.5)],
[Measurements(100, 0.3), Measurements(999, 0.5)]
]
# Added __repr__ method to Measurement class
def __repr__(self):
return '{0} {1}'.format(self.value, self.other)
我建议只要你有 class 个实例的列表就这样做,它使调试更容易,而不是得到这个,你会得到更有意义的东西。
<__main__.Measurements object at 0x0000000003E2C438>
现在为了比较值,我使用 zip
将两个列表分组在一起,以便更容易地比较值。然后对于内部 for 循环,我们再次将每个组的嵌套列表压缩在一起。从这里开始,每个项目都是一个度量值,我们可以检查它们的值。
for crit_lst, comp_lst in zip(obs, compare):
for crit_meas, comp_meas in zip(crit_lst, comp_lst):
print(crit_meas, comp_meas)
if crit_meas.value != comp_meas.value: # example of comparing their values
print('Mis-Match', crit_meas.value, comp_meas.value)
我不知道你是否真的需要测量的 two-dimensional 结构,这将它变成了 numpy 中的 three-dimensional 结构。如果不需要,您可以删除额外的维度。
import numpy as np
lower = 20
upper = 110
meas = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])
crit = np.array([[999, 999]])
comp = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])
mask = (meas[:,:,0] > lower) * (meas[:,:,0] < upper)
meas[mask,0] = (mask * crit)[mask] # apply mask to inner first column
out = (meas == comp).all(axis=2) # compare each measurement to respective one in comp
print(out)
这给出:
[[False False]
[ True False]]
这是
我正在使用 yield
语句而不是 return
。
这是代码:
class Measurements():
def __init__(self, value, other):
self.value = value
self.other = other
class Criteria():
def __init__(self, new_value, measurements):
self.new_value = new_value
self.measurements = measurements
def method(self):
for measurement in self.measurements:
if 20 < measurement.value < 110:
measurement.value = self.new_value
return self.measurements
class Evaluate():
def __init__(self, criteria):
self.criteria = criteria
def execute(self):
for c in self.criteria:
c.method()
yield c.measurements
def main():
criteria = [
Criteria(999, [Measurements(100, 0.3), Measurements(33, 0.5)]),
Criteria(999, [Measurements(150, 0.3), Measurements(35, 0.5)]),
]
compare = [
Measurements(999, 0.3), Measurements(999, 0.5),
Measurements(100, 0.3), Measurements(999, 0.5)
]
obs = Evaluate(criteria).execute()
# here compare
if __name__ == "__main__":
main()
我想将 obs
中的输出值与 compare
中的值进行比较。我指的是 Measurements
部分。
所以,从 obs
,我们有(对于 运行 代码之后的变量值):999,999,150,999
(因为如果 20
从compare
我们有:999,999,100,999
仍然不确定您要执行哪些检查,但这里有一个示例可以帮助您入门。进行了一些更改
# Made compare a list contain lists of Measurements to match criteria
compare = [
[Measurements(999, 0.3), Measurements(999, 0.5)],
[Measurements(100, 0.3), Measurements(999, 0.5)]
]
# Added __repr__ method to Measurement class
def __repr__(self):
return '{0} {1}'.format(self.value, self.other)
我建议只要你有 class 个实例的列表就这样做,它使调试更容易,而不是得到这个,你会得到更有意义的东西。
<__main__.Measurements object at 0x0000000003E2C438>
现在为了比较值,我使用 zip
将两个列表分组在一起,以便更容易地比较值。然后对于内部 for 循环,我们再次将每个组的嵌套列表压缩在一起。从这里开始,每个项目都是一个度量值,我们可以检查它们的值。
for crit_lst, comp_lst in zip(obs, compare):
for crit_meas, comp_meas in zip(crit_lst, comp_lst):
print(crit_meas, comp_meas)
if crit_meas.value != comp_meas.value: # example of comparing their values
print('Mis-Match', crit_meas.value, comp_meas.value)
我不知道你是否真的需要测量的 two-dimensional 结构,这将它变成了 numpy 中的 three-dimensional 结构。如果不需要,您可以删除额外的维度。
import numpy as np
lower = 20
upper = 110
meas = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])
crit = np.array([[999, 999]])
comp = np.array([[[100, 0.3], [33, 0.5]], [[150, 0.3], [35, 0.5]]])
mask = (meas[:,:,0] > lower) * (meas[:,:,0] < upper)
meas[mask,0] = (mask * crit)[mask] # apply mask to inner first column
out = (meas == comp).all(axis=2) # compare each measurement to respective one in comp
print(out)
这给出:
[[False False]
[ True False]]