簡體   English   中英

獲取矩陣的最后一個元素

[英]Get the last element of a matrix

考慮我有以下矩陣

M <- matrix(1:9, 3, 3)
M
#      [,1] [,2] [,3]
# [1,]    1    4    7
# [2,]    2    5    8
# [3,]    3    6    9

我只想找到最后一個元素,即M[3, 3]

由於此矩陣列和行的大小是動態的,因此我們無法將其硬編碼為M[3, 3]

如何獲取last元素的值?

目前,我已經使用以下代碼完成了

M[nrow(M), ncol(M)]
# [1] 9

有什么更好的方法嗎?

R中的矩陣只是具有dim屬性的向量,因此您可以將其作為一個子集

M[length(M)]
## [1] 9

盡管(如@James所述),如果您想保持矩陣結構,您的解決方案可能會更通用,因為您可以添加drop = FALSE

M[nrow(M), ncol(M), drop = FALSE]
#      [,1]
# [1,]    9

雖然,我的解決方案也可以使用dim<-替換功能以類似的方式進行修改

`dim<-`(M[length(M)], c(1,1))
#      [,1]
# [1,]    9

一些基准 (由@ zx8754提供)

M <- matrix(runif(1000000),nrow=1000)

microbenchmark(
  nrow_ncol={
    M[nrow(M),ncol(M)]
  },
  dim12={
    M[dim(M)[1],dim(M)[2]]
  },
  length1={
    M[length(M)]
  },
  tail1={
    tail(c(M),1)
  },
  times = 1000
)

# Unit: nanoseconds
#      expr     min      lq        mean    median      uq      max neval cld
# nrow_ncol     605    1209    3799.908    3623.0    6038    27167  1000   a 
#     dim12     302     605    2333.241    1811.0    3623    19922  1000   a 
#   length1       0     303    2269.564    1510.5    3925    14792  1000   a 
#    tail 1 3103005 3320034 4022028.561 3377234.0 3467487 42777080  1000   b

我寧願:

tail(c(M),1)
# [1] 9

一種執行此操作並避免不必要的對象名稱重復(或愚蠢的錯字)的方法是使用管道。 喜歡這個:

require(magrittr)
M %>% .[nrow(.), ncol(.)]
##[1] 9
M %>% `[`(nrow(.), ncol(.))
##[1] 9
M %>% extract(nrow(.), ncol(.))
##[1] 9

這些方法是等效的,因此您可以選擇對您而言更直觀的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM