Выполнить операцию на месте с помощью xarrayPython

Программы на Python
Ответить
Anonymous
 Выполнить операцию на месте с помощью xarray

Сообщение Anonymous »

Я схожу с ума по следующей проблеме: я хочу сопоставить значения из массива данных xarray. Поскольку я ограничен в памяти, я хочу сделать это на месте, но это просто не сработает! Код работает нормально, когда я сохраняю все во временном массиве и присваиваю этому массиву corine_lc.values. Но я не могу этого сделать, произойдет ООМ. Выполнение этого на месте не влияет на исходные данные!
Может ли кто-нибудь указать мне, что, черт возьми, происходит в приведенном ниже коде?
Утверждение не выполняется и показывает, что сопоставление не произошло. Как я могу заставить это работать? Спасибо вам огромное!!
import rioxarray as rxr
import geopandas as gpd
import xarray as xr
import numpy as np
CORINE_NA = -1000

corine_lc = rxr.open_rasterio('other_inputs/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif')

vat_df = gpd.read_file('other_inputs/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif.vat.dbf')
vat_df['CODE_18'] = vat_df['CODE_18'].astype(np.int16)
value_to_class = dict(zip(vat_df['Value'], vat_df['CODE_18']))

data_shape = corine_lc.shape
xvals = corine_lc.coords['x'].values
yvals = corine_lc.coords['y'].values
chunk_size = 10000

# Iterate in chunks along the first axis, which is the y axis!
for start_idx in range(0, data_shape[1], chunk_size):
end_idx = min(start_idx + chunk_size, data_shape[1])
chunk = corine_lc.isel(y=slice(start_idx, end_idx)).values[0, :, :]
# Map values using the dictionary
flat_chunk = chunk.flatten()
mapped_flat_chunk = np.fromiter((value_to_class.get(v, CORINE_NA) for v in flat_chunk), dtype=np.int16)
mapped_chunk = mapped_flat_chunk.reshape(chunk.shape)

# Assign mapped chunk back to dataset
corine_lc.loc[dict(x=slice(xvals[0], xvals[-1]), y=slice(yvals[start_idx], yvals[end_idx-1]))] = mapped_chunk

# Verify that forest code is present
assert (corine_lc > 311).any(), "The values seem not to be in the expected range!"
return corine_lc


Подробнее здесь: https://stackoverflow.com/questions/791 ... ith-xarray
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»