Замена для вектора значений в 2d массиве (Python)

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Замена для вектора значений в 2d массиве (Python)

Сообщение jerry-maori » 13 янв 2018, 18:17

Есть 2d массив
и есть вектор значений.
Нужно все значения массива, которые равны какому либо значению из вектора поменять.
Если бы вектор был из 1 элемента -- фигня задача
А на векторе я чой-то залип;(
Рещение "в лоб" есть, но всяко можно как-то элегантнее...

Код: Выделить всё

import pandas as pd
import numpy as np
from osgeo import gdal

raster_in='C_World_Ecological_2015.tif'
WEM=pd.read_csv('WEM_2015.csv',sep=';',low_memory=False)


driver = gdal.GetDriverByName('GTiff')
file = gdal.Open(raster_in)
band = file.GetRasterBand(1)
lista = band.ReadAsArray()
listb = band.ReadAsArray()

glc_vals=np.unique(WEM['glc_val'])
for G in glc_vals:
    raw_vals=WEM['value'][WEM['glc_val']==G].values
    for U in raw_vals:
        print(U)
        listb[lista==U]=G
       
raster_out='C_World_Ecological_2015_GLC.tif'
# create new file
file2 = driver.Create(raster_out, file.RasterXSize , file.RasterYSize , 1)
file2.GetRasterBand(1).WriteArray(listb)
# spatial ref system
proj = file.GetProjection()
georef = file.GetGeoTransform()
file2.SetProjection(proj)
file2.SetGeoTransform(georef)
file2.FlushCache()
Заранее спасибо!

voltusya
Участник
Сообщения: 78
Зарегистрирован: 04 ноя 2014, 18:40
Репутация: 48
Откуда: Санкт-Петербург

Re: Замена для вектора значений в 2d массиве (Python)

Сообщение voltusya » 13 янв 2018, 20:01

Уж не знаю на сколько элегантнее, но можно так (если я правильно вас поняла):
np.place(*исходный массив*,np.isin(*исходный массив*,*вектор искомых значений*), *Значение, на которое менять*)
Что-то типа:
np.place(lista, np.isin(lista, glc_vals),*Значение, на которое менять* )

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей