我进入了一行代码,我想将其从numpy语法转换为常规python 2.7语法:
SunAz=SunAz + (SunAz < 0) * 360
来源:https://github.com/Sandia-Labs/PVLIB_Python/blob/master/pvlib/pvl_ephemeris.py#L147
如果我们假设numpy数组是一维的,它能被翻译成常规的python 2.7语法吗
newSunAz = []
for item in SunAz:
if item < 0:
newItem = item + item*360
newSunAz.append(newItem)
else:
newSunAz.append(item)
谢谢你的帮助。
我不确定这是否是翻译。线路
SunAz=SunAz + (SunAz < 0) * 360
(SunAz < 0)
创建一个布尔数组,如果角度为负数,则为True,否则为false。将False
乘以常数得到0
,并且True
被解释为1
。这句话实际上是说,"如果为负数,则将角度偏移360度,否则保持不变"。
因此,更字面的翻译如下:
SunAz = [angle + 360 if angle < 0 else angle for angle in SunAz]
试试这个:
new_sun_az = [i+360 if i > 0 else i for i in sun_az]
主要区别在于,大多数运算符应用于普通Python列表中的列表对象并返回单个结果,而它们返回一个numpy数组,其中每个项都是应用于numpy数组原始数组上相应项的运算结果。
>>> import numpy as np
>>> plainlist = range(5)
>>> plainlist
[0, 1, 2, 3, 4]
>>> plainlist > 5 # single result
True
>>> nparray = np.array(plainlist)
>>> nparray
array([0, 1, 2, 3, 4])
>>> nparray > 5 # array of results
array([False, False, False, False, False], dtype=bool)
>>>
[更新]
迈克的回答是对的。我最初的回答是:
new_sun_az = [i+i*360 if i > 0 else i for i in sun_az]