簡體   English   中英

R從一個矩陣行中減去另一個矩陣中的元素

[英]R Subtract elements from one matrix row from another matrix

因此,以這些為例。

mat1<- matrix(c(1:30),ncol=3)

     [,1] [,2] [,3]
[1,]    1   11   21
[2,]    2   12   22
[3,]    3   13   23
[4,]    4   14   24
[5,]    5   15   25
[6,]    6   16   26
[7,]    7   17   27
[8,]    8   18   28
[9,]    9   19   29
[10,]   10   20   30



mat2 <- matrix(c(5,rep(1,9),5.4,rep(2,9),5.5,rep(3,9)),ncol=3)

    [,1] [,2] [,3]
[1,]    5  5.4  5.5
[2,]    1  2.0  3.0
[3,]    1  2.0  3.0
[4,]    1  2.0  3.0
[5,]    1  2.0  3.0
[6,]    1  2.0  3.0
[7,]    1  2.0  3.0
[8,]    1  2.0  3.0
[9,]    1  2.0  3.0

我試圖從mat1每一行中減去mat2的第一列,但是使用以下代碼:

mat1[,1:3]-mat2[1,1:3]

      [,1] [,2] [,3]
 [1,] -4.0  5.6 15.5
 [2,] -3.4  6.5 17.0
 [3,] -2.5  8.0 17.6
 [4,] -1.0  8.6 18.5
 [5,] -0.4  9.5 20.0
 [6,]  0.5 11.0 20.6
 [7,]  2.0 11.6 21.5
 [8,]  2.6 12.5 23.0
 [9,]  3.5 14.0 23.6
[10,]  5.0 14.6 24.5

你真的沒有得到那樣的結果。 我不完全了解這里發生了什么...好像mat2第一行的元素在減法過程中是交替的?

它與

matrix(c(mat1[,1]-mat2[1,1],mat1[,2]-mat2[1,2],mat1[,3]-mat2[1,3]),ncol=3)

但是對於我的數據而言,它變得非常混亂。

有任何想法嗎?

如果要使用向量循環,則需要注意矩陣是按列填充的,並且循環是沿該方向進行的。 因此,您需要轉置矩陣:

t(t(mat1)-mat2[1,])
#      [,1] [,2] [,3]
# [1,]   -4  5.6 15.5
# [2,]   -3  6.6 16.5
# [3,]   -2  7.6 17.5
# [4,]   -1  8.6 18.5
# [5,]    0  9.6 19.5
# [6,]    1 10.6 20.5
# [7,]    2 11.6 21.5
# [8,]    3 12.6 22.5
# [9,]    4 13.6 23.5
#[10,]    5 14.6 24.5

或者您可以這樣做:

 mat1-mat2[1,col(mat2)]
   #      [,1] [,2] [,3]
   #[1,]   -4  5.6 15.5
   #[2,]   -3  6.6 16.5
   #[3,]   -2  7.6 17.5
   #[4,]   -1  8.6 18.5
   #[5,]    0  9.6 19.5
   #[6,]    1 10.6 20.5
   #[7,]    2 11.6 21.5
   #[8,]    3 12.6 22.5
   #[9,]    4 13.6 23.5
  #[10,]    5 14.6 24.5

暫無
暫無

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

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