R 通过'快速矩阵子集;[';:按行、按列还是不重要?

R 通过'快速矩阵子集;[';:按行、按列还是不重要?,r,matrix,subset,R,Matrix,Subset,假设我们正在尝试翻转一个方形矩阵,而不关心它是按行还是按列翻转。我们有两种选择: flip.by.col <- function(x) x[, rev(seq_len(ncol(x)))] flip.by.row <- function(x) x[rev(seq_len(nrow(x))), ] FLIP.B.Cal.P>在每种情况下,按行翻转或按列翻转,需要移动相同数量的点:只有中间行/列中的元素(当 n>代码>为奇数时)保持固定位置。因此,无论是哪种方式,都在执行相同的工作量

假设我们正在尝试翻转一个方形矩阵,而不关心它是按行还是按列翻转。我们有两种选择:

flip.by.col <- function(x) x[, rev(seq_len(ncol(x)))]
flip.by.row <- function(x) x[rev(seq_len(nrow(x))), ]

<代码> FLIP.B.Cal.P>在每种情况下,按行翻转或按列翻转,需要移动相同数量的点:只有中间行/列中的元素(当<代码> n>代码>为奇数时)保持固定位置。因此,无论是哪种方式,都在执行相同的工作量。

请注意,通过使用
seq.int
,您可以获得微小的性能提升

flip.by.col2 <- function(x) x[, seq.int(ncol(x), 1)]
flip.by.row2 <- function(x) x[seq.int(nrow(x), 1), ]

在每一种情况下,按行翻转或按列翻转,需要移动相同数量的点:只有中间行/列中的元素(当<代码> n>代码>为奇数时)保持固定的位置。因此,无论是哪种方式,都在执行相同的工作量。

请注意,通过使用
seq.int
,您可以获得微小的性能提升

flip.by.col2 <- function(x) x[, seq.int(ncol(x), 1)]
flip.by.row2 <- function(x) x[seq.int(nrow(x), 1), ]

flip.by.col2谢谢。要移动的元素数是相同的,同意。但是如果矩阵是按列存储的(是吗?),替换一列通常应该更快,因为要替换的元素是按顺序存储的。我确信这种差异在C/C++矩阵运算中是可以观察到的,从行到列的切换可以显著提高。R对此免疫吗?为什么?好的,好问题。是的,矩阵是按列存储的。至于剩下的部分,也许可以深入研究一下,看看在索引矩阵时会发生什么。我的猜测是,很多时间都花在分配一个新的向量来将值复制到其中。谢谢。要移动的元素数是相同的,同意。但如果矩阵是按列存储的(是吗?),替换一列通常应该更快,因为要替换的元素是按顺序存储的。我确信这种差异在C/C++矩阵运算中是可以观察到的,从行到列的切换可以显著提高。R对此免疫吗?为什么?好的,好问题。是的,矩阵是按列存储的。至于剩下的部分,也许可以深入研究一下,看看当你为矩阵编制索引时会发生什么。我的猜测是,很多时间都花在分配一个新的向量来将值复制到其中。