我是Python和Numpy的新手,我花了很多时间(几天)来寻找问题的答案,但是我很沮丧。我有一系列地震震级,需要将其转换为其他形式的震级(Mb到Mo)。对于小于4.3的幅度,我需要进行一次转换,对于大于或等于幅度的幅度,我需要进行第二次转换。我需要输出与输入的顺序相同,这就是我碰壁的地方。我可以将转换结果输出到两个单独的数组中,但是我不知道如何编写一个程序,该程序根据幅度选择一个方程,应用该方程,然后继续进行到数组中的下一个幅度。即使以下示例在许多级别上显然是不正确的,但我认为它显示了我正在尝试实现的目标:
data = numpy.genfromtxt('OK_mag3.csv')
mag = numpy.asarray(data)
for x in mag:
if x < 4.3:
mw = 1.03 + 0.67 * x
else:
mw = 0.1 + 0.88 * x
另外,获得此正确值一半的示例是:
mw = mag[mag<4.3]*0.67+1.03
但是我不知道如何结合第二个方程式。
非常感谢您的协助!
mw = numpy.where(mag < 4.3, 1.03 + 0.67 * mag, 0.1 + 0.88 * mag)
请参阅上的文档numpy.where
。第一个参数将转换data
为布尔值列表,第二个参数将使用一个或另一个函数来计算整个向量。然后where
根据布尔值选择两个结果中哪个更好。
编辑:基于注释中提出的问题,以下内容不会使工作加倍,并且可以避免其中一种计算无效的情况-但仍会为选择器数组占用一些内存。
mw = numpy.zeros(len(mag))
select = mag < 4.3
mw[select] = 1.03 + 0.67 * mag[select]
select = ~select
mw[select] = 0.1 + 0.88 * mag[select]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句