Найти и заменить числа с плавающей точкой на массиве numpy - PullRequest
1 голос
/ 04 октября 2019

У меня есть несколько больших списков (тысячи элементов), которые имеют определенные значения, например, одно из значений должно быть одним из них: 1.0, 2.0, 3.0, 4.0, 5.0.

Мне нужно найтии заменить некоторые из этих значений, и я хочу сделать это с минимальными вычислительными затратами. Есть ли способ сделать это без зацикливания на каждом элементе?

Вот что я получил до сих пор:

for x, y in np.ndindex(z_.shape):
    z_[x,y] = 150.0 if z_[x,y] == 1.0 else z_[x,y]
    z_[x,y] = 120.0 if z_[x,y] == 2.0 else z_[x,y]
    z_[x,y] = 110.0 if z_[x,y] == 3.0 else z_[x,y]

Можно ли обобщить их, если передать список значений, делая эту часть функции более общей?

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

IIUC, вы можете сделать:

import numpy as np

z_ = np.arange(0, 8).reshape((4, 2))

z_[z_ == 1] = 150
z_[z_ == 2] = 120
z_[z_ == 3] = 110

print(z_)

Вывод

[[  0 150]
 [120 110]
 [  4   5]
 [  6   7]]

См. массивы логических индексов . Хотя ответ Куанга Хоанг кажется более уместным.

0 голосов
/ 04 октября 2019

Вы можете использовать np.select:

z_ = np.select( (z_==1,z_==2, z_==3),
                (150, 120, 110),
                default=z_)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...