Работа с растровыми данными в R - большие массивы
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Работа с растровыми данными в R - большие массивы
Те кто работают с R наверное знают, что это хотя и мощный открытый инструмент с миллионом функций, но обладающий одной неприятной деталью - невозможностью работать с большими растрами, то есть например целиком сцену Landsat в него загрузить не получается, превышается лимит.
Такой вопрос, у кого стоит R или кто хочет попробовать, есть тестовый набор данных и готовый скрипт, предлагаю попробовать найти, где же все-таки этот порог проходит, в зависимости от оперативной памяти самого компа, конечно. Поидее надо бы провести тесты на разных конфигурациях, чтобы почетче понять зависимость. Что думаете не хотите ли поучаствовать в тестах? Пишите здесь, я пришлю скрипт, тест и инструкции.
Такой вопрос, у кого стоит R или кто хочет попробовать, есть тестовый набор данных и готовый скрипт, предлагаю попробовать найти, где же все-таки этот порог проходит, в зависимости от оперативной памяти самого компа, конечно. Поидее надо бы провести тесты на разных конфигурациях, чтобы почетче понять зависимость. Что думаете не хотите ли поучаствовать в тестах? Пишите здесь, я пришлю скрипт, тест и инструкции.
пристегивайтесь, турбулентность прямо по курсу
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
могу поучаствовать - так как сейчас хочу поставить (точнее опять поставить) R.
правильный ли дистрибутив я скачала R-2.6.2-win32.exe?
правильный ли дистрибутив я скачала R-2.6.2-win32.exe?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
спасибо, что откликнулась, вместе разбираться веселее
дистрибутив вполне подходящий
возьмем одну сцену Landsat, скажем вот p170r030_7x20010613.ETM-EarthSat-Orthorectified, если удобно взять другую сцену, чтобы не качать скажи какую.
дальше, склеив ее в стэк чем угодно, назовем test.img
дальше, как я описывал вот здесь, пытаемся загнать в R, для начала целиком, само собой сначала надо установить rgdal, в статье есть как это сделать.
скрипт следующий, очень коротенький
:
Скидывай прямо сюда, как ругается R, а я скину, что говорит мой. Сравним и перейдем ко второму этапу - определению, в каком объеме снимок все-таки загружается.
дистрибутив вполне подходящий
возьмем одну сцену Landsat, скажем вот p170r030_7x20010613.ETM-EarthSat-Orthorectified, если удобно взять другую сцену, чтобы не качать скажи какую.
дальше, склеив ее в стэк чем угодно, назовем test.img
дальше, как я описывал вот здесь, пытаемся загнать в R, для начала целиком, само собой сначала надо установить rgdal, в статье есть как это сделать.
скрипт следующий, очень коротенький

Код: Выделить всё
library(rgdal)
test = file.choose()[1]
x = new("GDALReadOnlyDataset", test)
imagedata1 = data.frame(getRasterTable(x))
Последний раз редактировалось Максим Дубинин 05 апр 2008, 23:32, всего редактировалось 1 раз.
пристегивайтесь, турбулентность прямо по курсу
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
теперь вопрос относительно rgdal
беру отсюда http://cran.r-project.org/web/packages/rgdal/index.html и беру Package source: rgdal_0.5-24.tar.gz
верно?
а дальше что делать?
а в статье нашла только ссылку на сам архив
беру отсюда http://cran.r-project.org/web/packages/rgdal/index.html и беру Package source: rgdal_0.5-24.tar.gz
верно?
а дальше что делать?
а в статье нашла только ссылку на сам архив
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
Полез было переписывать статью, но вчитавшись понял, что давно уже все написал
Ничего отдельно загружать не надо, надо:
1. Выбрать зеркало
2. С зеркало загрузить и установить rgdal
3. Загрузить установленный rgdal

1. Выбрать зеркало
2. С зеркало загрузить и установить rgdal
3. Загрузить установленный rgdal
Перед использованием примера необходимо убедиться что библиотека rgdal установлена (Packages\Set CRAN Mirror..., Packages\Install package) и загружена (Packages\Load package...).
пристегивайтесь, турбулентность прямо по курсу
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
Проверила на своей машинке. Ошибка такая:
На компе Windows XP, ОЗУ 1Gb
-------------Error: cannot allocate vector of size 1.6 Gb
In addition: Warning messages:
1: In array(dim = as.integer(c(rev(output.dim), length(band)))) :
Reached total allocation of 1023Mb: see help(memory.size)
...
На компе Windows XP, ОЗУ 1Gb
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
ага, хорошо, у меня ОЗУ 3Gb, ошибка такая:
У меня она выдает такое (жирным выделил одну цифру - доступный объем памяти):
Давай еще обменяемся содержанием вот такой команды:Error: cannot allocate vector of size 1.6 Gb
In addition: Warning messages:
1: In array(dim = as.integer(c(rev(output.dim), length(band)))) :
Reached total allocation of 1535Mb: see help(memory.size)
Код: Выделить всё
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 289675 7.8 531268 14.2 531268 14.2
Vcells 333918 2.6 1590317 12.2 1588180 12.2
пристегивайтесь, турбулентность прямо по курсу
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
у меня вот такое сообщение
а нет ли какой-то переменной в R которая отвечает за объем памяти выделенный под операции? типа как gridallocsize в arcinfo?used (Mb) gc trigger (Mb) max used (Mb)
Ncells 131352 3.6 350000 9.4 350000 9.4
Vcells 86246 0.7 786432 6.0 479260 3.7
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
Так, давай вот что попробуем:
первая строка должна выдать текущий лимит (какой у тебя?)
последняя строчка для проверки - установился ли memory.limit
после установки, надо запустить скрипт загрузки растра заново или только последнюю его строку:
По идее, вторая часть ошибки, типа того, что мы с тобой получали, должна уйти, вот эта часть:
Код: Выделить всё
memory.limit()
memory.limit(size = 3000)
memory.limit()
последняя строчка для проверки - установился ли memory.limit
после установки, надо запустить скрипт загрузки растра заново или только последнюю его строку:
Код: Выделить всё
imagedata1 = data.frame(getRasterTable(x))
1: In array(dim = as.integer(c(rev(output.dim), length(band)))) :
Reached total allocation of 1023Mb: see help(memory.size)
...
пристегивайтесь, турбулентность прямо по курсу
-
- Завсегдатай
- Сообщения: 386
- Зарегистрирован: 07 фев 2004, 14:31
- Репутация: 7
- Откуда: Лозанна
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
протестировала. действительно, после проведенных операций появляется только сообщение
и более ничегоError: cannot allocate vector of size 1.6 Gb
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
так, похоже все-таки задача изменением настроек не решается, по крайней мере сходу...
предлагаю зайти со стороны, вопрос такой, какого размера снимок у тебя R съедает без сообщений об ошибках?
У меня получилось загрузить в него 3836х3946 (1 канал конечно).
После загрузки в R, делаю так:
Что получается у тебя?
предлагаю зайти со стороны, вопрос такой, какого размера снимок у тебя R съедает без сообщений об ошибках?
У меня получилось загрузить в него 3836х3946 (1 канал конечно).
После загрузки в R, делаю так:
То есть вектор размером 363Mb в памяти, на диске это всего 15 Мб. Снимок последовательно обрезал IA.> object.size(imagedata1)
[1] 363285064
Что получается у тебя?
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 25 апр 2008, 16:56
- Репутация: 1
Re: Работа с растровыми данными в R - большие массивы
насколько я помню в R под виндовс размер памяти будет ограничен двумя гигами.sim писал(а):так, похоже все-таки задача изменением настроек не решается, по крайней мере сходу...
как это "склеить в стек"?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
почти так, можно поставить и больше с помощью memory.limit(), вот только это изменит allocation, а собственно ограничения на размер фрейма не отменитнасколько я помню в R под виндовс размер памяти будет ограничен двумя гигами.
вот таккак это "склеить в стек"?
В свете последних сообщений - уже не актуально, хоть бы один канал загрузить, куда уж там весь стэк.
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 25 апр 2008, 16:56
- Репутация: 1
Re: Работа с растровыми данными в R - большие массивы
sim писал(а): В свете последних сообщений - уже не актуально, хоть бы один канал загрузить, куда уж там весь стэк.
Получается матрица 46340 X 46340. Если одиночный слой лезет, то можно каждый слой хранить как отдельную матрицу, а не один общий датафрейм. Общего лимита на память в 64 битном R нет вообще.On all versions of R, the maximum length (number of elements) of a vector is 2^31 - 1 ~ 2*10^9, as lengths are stored as signed integers.
Наверное бОльшие матрицы можно кусками обрабатывать. Хранить в sql и писать свои функции враперы для обработки по кускам и слияния результатов счета.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Работа с растровыми данными в R - большие массивы
да, это понятно, что можно "разделять и властвовать", но задача была именно практическое ограничение определить.
один канал тоже не загружается, как я писал выше, приходится резать.
насчет размера - читал, растр представляет из себя матрицу меньшего размера, порядка 7000х8000, но видимо ограничение еще где-то, не грузится.
один канал тоже не загружается, как я писал выше, приходится резать.
насчет размера - читал, растр представляет из себя матрицу меньшего размера, порядка 7000х8000, но видимо ограничение еще где-то, не грузится.
пристегивайтесь, турбулентность прямо по курсу
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей