Нарезать матрицу квадратами ?
-
- Активный участник
- Сообщения: 205
- Зарегистрирован: 20 фев 2013, 21:48
- Репутация: 30
Нарезать матрицу квадратами ?
Делаю матрицу ( для примера ) такую :
zz=matrix(1:48,ncol=8)
получаю размер 6*8 :
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 7 13 19 25 31 37 43
[2,] 2 8 14 20 26 32 38 44
[3,] 3 9 15 21 27 33 39 45
[4,] 4 10 16 22 28 34 40 46
[5,] 5 11 17 23 29 35 41 47
[6,] 6 12 18 24 30 36 42 48
КАК нарезать всю матрицу кусочками например 2*2, чтобы получить такие вектора :
с перекрытием квадратов:
1 2 7 8
2 3 8 9
3 4 9 10
...
7 8 13 14
без перекрытия квадратов:
1 2 7 8
3 4 9 10
5 6 11 12
...
13 14 19 20
Это нужно для получения всякой статистики группы соседних пикселей спутникового снимка.
И можно ли сделать выборку не квадратной, а например КРУГЛОЙ или элипсовидной ?
Так как диаграмма рассеяния бывает скорее близкой к элипсу ...
zz=matrix(1:48,ncol=8)
получаю размер 6*8 :
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 7 13 19 25 31 37 43
[2,] 2 8 14 20 26 32 38 44
[3,] 3 9 15 21 27 33 39 45
[4,] 4 10 16 22 28 34 40 46
[5,] 5 11 17 23 29 35 41 47
[6,] 6 12 18 24 30 36 42 48
КАК нарезать всю матрицу кусочками например 2*2, чтобы получить такие вектора :
с перекрытием квадратов:
1 2 7 8
2 3 8 9
3 4 9 10
...
7 8 13 14
без перекрытия квадратов:
1 2 7 8
3 4 9 10
5 6 11 12
...
13 14 19 20
Это нужно для получения всякой статистики группы соседних пикселей спутникового снимка.
И можно ли сделать выборку не квадратной, а например КРУГЛОЙ или элипсовидной ?
Так как диаграмма рассеяния бывает скорее близкой к элипсу ...
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нарезать матрицу квадратами ?
все можно, но не нужно - будет медленно, даже если векторизовать. Поэтому либо прицепите С++ через Rcpp, либо вообще пишите на С. Есть еще пакет raster, но насколько там эффективно локальное окно реализовано, не знаю.sergsh писал(а):И можно ли сделать выборку не квадратной, а например КРУГЛОЙ или элипсовидной ?
-
- Активный участник
- Сообщения: 205
- Зарегистрирован: 20 фев 2013, 21:48
- Репутация: 30
Re: Нарезать матрицу квадратами ?
В Matlab и в Octave такая штука называется col2im, работает на больших матрицах какие то милисекудны, писать ее на С смысла никакого нет вообще, будет выигрыш на 50 % и это будет 0.05 секунды. Зачем ?
Просто R использую 5 дней, и из нужных функций не все еще нашел ...
Если знаете - скажите пож как она называется в R
Просто R использую 5 дней, и из нужных функций не все еще нашел ...
Если знаете - скажите пож как она называется в R
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нарезать матрицу квадратами ?
для R скорость между самим R и С++ обычно отличается на 3-4 порядка. И память R очень любит.sergsh писал(а):В Matlab и в Octave такая штука называется col2im, работает на больших матрицах какие то милисекудны, писать ее на С смысла никакого нет вообще, будет выигрыш на 50 % и это будет 0.05 секунды. Зачем ?
тыц тыц тыц
-
- Активный участник
- Сообщения: 205
- Зарегистрирован: 20 фев 2013, 21:48
- Репутация: 30
Re: Нарезать матрицу квадратами ?
Жаль, но по вашим ссылкам немного не то ...
Мне нужно всего лишь нарезать матрицу на квадраты
Мне нужно всего лишь нарезать матрицу на квадраты
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нарезать матрицу квадратами ?
1) по ссылкам то - это итератор, который получает искомые матрицы. Никто не мешает записывать их в глобальный список или array()sergsh писал(а):Жаль, но по вашим ссылкам немного не то ...
2) все аналогичные задачи (например), которые делаются на самом R, основаны на том или итераторе, и будут медленными (если писать явный цикл, то очень-очень медленными). Извлекать можно примерно так (вариантов n!, написал по возможности простой и понятный)
Код: Выделить всё
nx<-6
ny<-6
m<-matrix(1:(nx*ny),ncol=nx,nrow=ny)
# window shifts, 2x2 window, anchor at (0,0)
w.shift<-rbind(c(0,0), c(1,0), c(1,1), c(0,1))
# window anchor positions
w.pos.x<-1:(nx/2)*2-1
w.pos.y<-1:(ny/2)*2-1
w.pos <-expand.grid(w.pos.x,w.pos.y)
w.fun<-function(i) {
cur.pos<-cbind(w.shift[,1]+w.pos[i,1],w.shift[,2]+w.pos[i,2])
m[cur.pos]
}
w.list<-apply(matrix(1:nrow(w.pos),ncol=1),1,w.fun)
w.pos.x<-1:(nx-1)
w.pos.y<-1:(ny-1)
w.pos <-expand.grid(w.pos.x,w.pos.y)
w.list<-apply(matrix(1:nrow(w.pos),ncol=1),1,w.fun)
скорее всего, с этими квадратами что-то нужно делать, а не просто нарезать. Делать можно в итератореМне нужно всего лишь нарезать матрицу на квадраты
-
- Активный участник
- Сообщения: 205
- Зарегистрирован: 20 фев 2013, 21:48
- Репутация: 30
Re: Нарезать матрицу квадратами ?
Gamm, спасибо за помощь !
6000 пакетов для R - это видимо миф, они похоже повторяют один другого по сто раз, и набегает много
я искал по такой строке
R function rearrange matrix into blocks ( analogue col2im )
и ничего не нашел. А процедура нужная каждый день. И - тем не менее нет.
Для Python кстати тоже нет
6000 пакетов для R - это видимо миф, они похоже повторяют один другого по сто раз, и набегает много
я искал по такой строке
R function rearrange matrix into blocks ( analogue col2im )
и ничего не нашел. А процедура нужная каждый день. И - тем не менее нет.
Для Python кстати тоже нет
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нарезать матрицу квадратами ?
это не миф, а медицинский факт. Их только на центральном складе больше 6500, не говоря об отдельных складах типа bioconductor и прочих мелких самопальных хранилищах отдельных частных лицsergsh писал(а):6000 пакетов для R - это видимо миф
еще раз - R не для обработки изображений. От слова совсем. Если что-то нужно из изображения выбрать, есть итераторы, и возможность подключить С/С++. Для обработке изображений в R обычно делают переходник к какому-нибудь ImageMagick/ITK/OpenCV, который написан на С/С++, и оформляют в виде пакета.А процедура нужная каждый день. И - тем не менее нет.
-
- Активный участник
- Сообщения: 205
- Зарегистрирован: 20 фев 2013, 21:48
- Репутация: 30
Re: Нарезать матрицу квадратами ?
Так изображение - это и есть матрица, иначе говоря таблица с цифрами.
То есть R не для обработки матриц ?
Видимо это не так, иначе обрабатывать будет вообще нечего ...
То есть R не для обработки матриц ?
Видимо это не так, иначе обрабатывать будет вообще нечего ...
-
- Активный участник
- Сообщения: 205
- Зарегистрирован: 20 фев 2013, 21:48
- Репутация: 30
Re: Нарезать матрицу квадратами ?
Gamm, а какие еще репозитории R-пакетов вы бы могли посоветовать ?
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Нарезать матрицу квадратами ?
изображения и матрицы - разные вещи. Матрицы - это линейная алгебра, BLAS, и пр., в R все это есть, но на больших матрицах он тормозит. А изображения - это фильтры, Фурье, сегментация, распознавание образов, и пр., методы практически не пересекаются. Тем более были упомянуты космические снимки, размеры которых нынче 10000х10000. Так что всякие изображения, дифуры на больших сетках, и пр. суровый счет - это только Матлаб. А вот нетривиальное статистическое моделирование и анализ (на небольших данных) - это R.sergsh писал(а):Так изображение - это и есть матрица, иначе говоря таблица с цифрами.
То есть R не для обработки матриц ?
поэтому репозиториев для R под обработку изображений посоветовать не могу, их нет. А то, что есть другого для обработки изображений, я перечислил.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей