0

我还有一个关于 numpy python 模块语法的问题,我想将其转换为常规的 python 2.7 语法。这是 numpy 版本:

if any((var.theta < 0) | (var.theta >= 90)):
    print('Input incident angles <0 or >=90 detected For input angles with absolute value greater than 90, the ' + 'modifier is set to 0. For input angles between -90 and 0, the ' + 'angle is changed to its absolute value and evaluated.')
    var.theta[(var.theta < 0) | (var.theta >= 90)]=abs((var.theta < 0) | (var.theta >= 90))

源代码: https ://github.com/Sandia-Labs/PVLIB_Python/blob/master/pvlib/pvl_physicaliam.py#L93-95

如果我们假设 numpy 数组是一维的,那么常规的 python 2.7 语法会是这样的:

newTheta = []
for item in var.theta:
    if (item < 0) and (item >= 90):
        print('Input incident angles <0 or >=90 detected For input angles with absolute value greater than 90, the ' + 'modifier is set to 0. For input angles between -90 and 0, the ' + 'angle is changed to its absolute value and evaluated.')
        newItem = abs(item)
        newTheta.append(newItem)

?? 感谢您的答复。

4

1 回答 1

2

换句话说,if any((var.theta < 0) | (var.theta >= 90))表达式的含义是:“如果 var.theta 中的任何条目小于零大于或等于 90,则...”

您的控制语句流说的是“如果 var.theta 的条目小于 0大于或等于 90,则执行...”。

如果您真的是指在普通的 Python 示例中,那么是的,它看起来像这样。或者,您可以使用列表推导:

newTheta = [abs(item) for item in var.theta if (item < 0 or item >= 90)]

列表推导更紧凑,对于简单的操作更容易阅读,也更容易被解释器优化。

于 2014-11-10T04:54:56.387 回答