在DolphinDB database中,我想做一个matrix,它是从一个vector转换过来的,比如这个vector长度为1000,我希望得到一个900*100的matrix, 使得i 行是 v[i:(i+100)]。 请问有什么高效的办法吗?
DolphinDB的矩阵在物理存储是按照列优先(column major)进行的。也就是说,矩阵在内存中的存储模型相当于是把矩阵的每一个列首尾连接起来占用了一段连续的空间。因此,按列读写矩阵比按行读写有更高的效率。下面我们通过具体代码来测试。 按行读写测试100次,耗时月1480ms timer(100) { v = double(1..1000) m1 = matrix(DOUBLE,900,100) for(i in 0:900) m1[i,] = v[i:(i+100)] } 按列读写测试100次,耗时月22ms。比按行读写快近70倍。 timer(100){ x=double(1..1000) m1 = matrix(DOUBLE, 900, 100) for(i in 0:100) m1[i] = v[i:(i+900)] }
DolphinDB的矩阵在物理存储是按照列优先(column major)进行的。也就是说,矩阵在内存中的存储模型相当于是把矩阵的每一个列首尾连接起来占用了一段连续的空间。因此,按列读写矩阵比按行读写有更高的效率。下面我们通过具体代码来测试。
按行读写测试100次,耗时月1480ms
按列读写测试100次,耗时月22ms。比按行读写快近70倍。