golangで2D arrayの一部を素早くコピーする方法
golangを使って、2D array(もしくは2D slice型)の一部を早くコピーする方法を探しています。
先にサンプルコードを書いて、その後詳しく質問させていただきます。
package main
import "strconv"
func CreateNewMatrix(Nrow int, Ncol int) [][]int {
///create Nrow x Ncol matrix
tmpImg := make([][]int, Nrow)
for i := range tmpImg {
tmpImg[i] = make([]int, Ncol)
}
return tmpImg
}
func main() {
MaxRowSize := 1000
MaxColSize := 1000
M := CreateNewMatrix(MaxRowSize, MaxColSize)
for iy:=0; iy<MaxRowSize; iy++ {
for ix:=0; ix<MaxColSize; ix++ {
M[iy][ix] = iy+ix
}
}
smallM_Size := 25;
tmp := ""
smallM := map[int]string{} //便宜上、mapを使っています。
idx := 0
for iy:=0; iy<MaxRowSize; iy += smallM_Size {
for ix:=0; ix<MaxColSize; ix += smallM_Size {
tmp = ""
for sy:=0; sy<smallM_Size; sy++ {
for sx:=0; sx<smallM_Size; sx++ {
tmp += strconv.Itoa(M[iy+sy][ix+sx])
tmp += ":"
}
}
smallM[idx] = tmp
idx++
}
}
}
上記で行っていることは、まず1000x1000の行列("M"としています)を作成します。
その次に各エレメントに新規の情報(ここでは、iy+ix)を加えています。
この行列Mを用いて、その一部から25x25の小さな行列(map型のsmallMとします)の内容をコピーしています。便宜上このコピーしたsmallMの情報は、":"で区切られたstring型で保持しています。
ここでは、smallMを作成するときに、各エレメントづつコピーしていますが、
より早くコピーする方法があるかどうかを知りたいです。
実際にはこの動作をより大きなサイズの行列Mに対し、より多くのsmallMを作成する必要があります。
何とかこのプロセスにかかる時間を削減したいと考えています。
少し試したことは、M[iy][1:25]などによる行列へのアクセス方法は知っていますが、
これをsmallMに直接移すことを試みましたが、どうやらできないようです。
ただ単にコピーがしたいだけですので、早く行う方法・アルゴリズムなどを知っていれば、ご教授をお願いしたいです。
よろしくお願いします。