首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中具有锚定内部基准的矩阵中的行计算

在R中具有锚定内部基准的矩阵中的行计算
EN

Stack Overflow用户
提问于 2020-12-10 05:26:31
回答 2查看 24关注 0票数 0

我有一个矩阵,我想对矩阵中的每个数字进行计算,这样我就可以得到另一个具有相同维数的矩阵,但只有计算结果。这应该很简单,除非等式的一部分取决于我访问的是哪一行,因为我将需要对同一行中的列2的数字进行内部引用。

我想要应用的等式是:output_matrix value = (input_matrix value at a given position) - (input_matrix value in the same row at column[,2])

例如,对于矩阵中的1,1,计算将是1-5

对于矩阵中的位置1,2,计算将是5-5

对于矩阵中的位置2,1,计算将是2-6

代码语言:javascript
复制
input_matrix<- matrix(1:12, nrow = 4, ncol = 3)

     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

输出矩阵最终应该如下所示:

代码语言:javascript
复制
     [,1] [,2] [,3]
[1,]    -4   0   4
[2,]    -4   0   4
[3,]    -4   0   4
[4,]    -4   0   4

我试过这样做:

代码语言:javascript
复制
output_matrix<-apply(input_matrix, MARGIN=1, function(x) x-x[2])

但这给了我下面的输出,看起来像是正确的矩阵,但它的一侧发生了翻转。

代码语言:javascript
复制
     [,1] [,2] [,3] [,4]
[1,]   -4   -4   -4   -4
[2,]    0    0    0    0
[3,]    4    4    4    4

我不确定是否有一种方法可以使输出的方向与我的input_matrix相同,或者是否可以只转置列和行?我知道如果我使用

代码语言:javascript
复制
t(output_matrix)

以这种方式转置矩阵确实给了我正确的矩阵和正确的方向,但我担心输出方向在原始计算中是反转的,我想知道是否有更好的方法来做到这一点,其中输出与输入从一开始就是相同的方向?有没有以这种方式进行计算并将其转置会导致问题的情况?

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2020-12-10 05:30:42

这一切都是关于回收的,如果你需要行但它需要列,这有时可能会很棘手,但在这种情况下,它对你有利,你可以直接使用-

代码语言:javascript
复制
input_matrix - input_matrix[, 2]
#      [,1] [,2] [,3]
# [1,]   -4    0    4
# [2,]   -4    0    4
# [3,]   -4    0    4
# [4,]   -4    0    4
票数 2
EN

Stack Overflow用户

发布于 2020-12-10 05:32:18

对于applyMARGIN = 1,它会转置输出,我们需要转置输出

代码语言:javascript
复制
t(apply(input_matrix, MARGIN=1, function(x) x-x[2]))

-output

代码语言:javascript
复制
#      [,1] [,2] [,3]
#[1,]   -4    0    4
#[2,]   -4    0    4
#[3,]   -4    0    4
#[4,]   -4    0    4

或者,另一个选项是sweep,它通过将MARGIN指定为1来执行相同的操作,并以相同的方向返回输出

代码语言:javascript
复制
sweep(input_matrix, 1, input_matrix[,2], `-`)

-output

代码语言:javascript
复制
#      [,1] [,2] [,3]
#[1,]   -4    0    4
#[2,]   -4    0    4
#[3,]   -4    0    4
#[4,]   -4    0    4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65225152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档