Я новичок в 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
но тогда я не знаю, как включить второе уравнение.
Любая помощь приветствуется!
mag
очень велико или фактическое вычисление сложнее, чем OP, то промежуточные массивы могут занимать много памяти. Сомневаюсь, что это произойдет на практике, но стоит отметить. 10.07.2014numpy.where
s:mw < 4.3
, сноваmw < 4.3
,mw[mw < 4.3]
). Одного из них можно избежать, если запомнитьmw < 4.3
. Тем не менее, в наши дни увеличение памяти на 25% не так уж и важно. 10.07.2014np.where
, так это вычисляет оба уравнения для полного массива, а затем выбирает одно или другое для вывода на основе первого логического условия. Это делает использованиеnp.where
не очень хорошим вариантом, например. при проверке на 0, чтобы избежать ошибок деления на ноль... 10.07.2014select = select == False
вы можете просто использовать~select
, напримерmw[~select] = 0.1 + 0.88 * mag[~select]
. 10.07.2014