需要帮助了解一行代码如何使用最大y坐标在python中查找对应的X值吗
我有一个脚本,每行循环42个X和Y坐标,并找到对应于该行中最高Y值的X坐标。如果X值对应于最高的Y,则返回1(True),否则返回0 一切都很好。我只是有点不明白为什么它会起作用。我将发布脚本中的相关代码部分,然后讨论我后来感到困惑的部分需要帮助了解一行代码如何使用最大y坐标在python中查找对应的X值吗,python,Python,我有一个脚本,每行循环42个X和Y坐标,并找到对应于该行中最高Y值的X坐标。如果X值对应于最高的Y,则返回1(True),否则返回0 一切都很好。我只是有点不明白为什么它会起作用。我将发布脚本中的相关代码部分,然后讨论我后来感到困惑的部分 for row in reader: vals = row[0:84] vals = [float(v) for v in vals] # convert from strings to floats max_i = np.nanargmax
for row in reader:
vals = row[0:84]
vals = [float(v) for v in vals] # convert from strings to floats
max_i = np.nanargmax(vals[1::2]) # go from index 1 in steps of 2, ie. only the y values, and find the max y value. Ignore NA results.
fan_line = 0
for i in range(0,84,2): # go through x values
fan_line += 1
max_y = 1 if max_i*2 == i else 0 # note, it's max_i*2 because max_i is the index in just the y list (vals[1::2])
让我困惑的是:
max_y = 1 if max_i*2 == i else 0 # note, it's max_i*2 because max_i is the index in just the y list
我知道在#之后有一个解释,但老实说,我不明白。写剧本的人确实向我解释过一次,这很有道理,但他们不再是我部门的一员。我真的很想知道到底发生了什么,以防对未来的项目有用。我理解代码的其余部分,但这一行让我感到困惑
编辑
对不起,我应该澄清我不明白的是什么。我搞不懂max_I*2==I在做什么。
max_i*2
与“i”的关系如何?这是python中的三元运算符:
线路
max_y=1,如果max_i*2==i=0
相当于
如果max_i*2==i:
最大值y=1
其他:
mas_y=0
在max_i=np.nanargmax(vals[1::2])行中,它构造一个具有每秒值的数组,然后在该“每秒值”数组中查找最大值的位置
为了获得原始数组中的位置,我们需要将其乘以2(并加1)
例如:
>>> alphabet
'abcdefghijklmnopqrstuvwxyz'
>>> alphabet[1::2]
'bdfhjlnprtvxz'
>>> alphabet[1::2].index('j')
4
>>> alphabet[4*2 + 1]
'j'
>>>
重构建议:为了减少代码的混乱,在第一时间将数据转换为元组列表;使用或points=list(zip(VAL[0::2],VAL[1::2]))
谢谢您的回答。我现在意识到我不清楚我的问题是什么。不过,我觉得你对三元运算符的分解很有用。谢谢你的回复。这是非常清楚和有意义的。你的例子也很有用。