Я схожу с ума по следующей проблеме: я хочу сопоставить значения из массива данных 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
Выполнить операцию на месте с помощью xarray ⇐ Python
Программы на Python
-
Anonymous
1731272390
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79175776/perform-operation-in-place-with-xarray[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия