我有一个矩阵,我想对矩阵中的每个数字进行计算,这样我就可以得到另一个具有相同维数的矩阵,但只有计算结果。这应该很简单,除非等式的一部分取决于我访问的是哪一行,因为我将需要对同一行中的列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
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输出矩阵最终应该如下所示:
[,1] [,2] [,3]
[1,] -4 0 4
[2,] -4 0 4
[3,] -4 0 4
[4,] -4 0 4我试过这样做:
output_matrix<-apply(input_matrix, MARGIN=1, function(x) x-x[2])但这给了我下面的输出,看起来像是正确的矩阵,但它的一侧发生了翻转。
[,1] [,2] [,3] [,4]
[1,] -4 -4 -4 -4
[2,] 0 0 0 0
[3,] 4 4 4 4我不确定是否有一种方法可以使输出的方向与我的input_matrix相同,或者是否可以只转置列和行?我知道如果我使用
t(output_matrix)以这种方式转置矩阵确实给了我正确的矩阵和正确的方向,但我担心输出方向在原始计算中是反转的,我想知道是否有更好的方法来做到这一点,其中输出与输入从一开始就是相同的方向?有没有以这种方式进行计算并将其转置会导致问题的情况?
任何帮助都将不胜感激。
发布于 2020-12-10 05:30:42
这一切都是关于回收的,如果你需要行但它需要列,这有时可能会很棘手,但在这种情况下,它对你有利,你可以直接使用-:
input_matrix - input_matrix[, 2]
# [,1] [,2] [,3]
# [1,] -4 0 4
# [2,] -4 0 4
# [3,] -4 0 4
# [4,] -4 0 4发布于 2020-12-10 05:32:18
对于apply和MARGIN = 1,它会转置输出,我们需要转置输出
t(apply(input_matrix, MARGIN=1, function(x) x-x[2]))-output
# [,1] [,2] [,3]
#[1,] -4 0 4
#[2,] -4 0 4
#[3,] -4 0 4
#[4,] -4 0 4或者,另一个选项是sweep,它通过将MARGIN指定为1来执行相同的操作,并以相同的方向返回输出
sweep(input_matrix, 1, input_matrix[,2], `-`)-output
# [,1] [,2] [,3]
#[1,] -4 0 4
#[2,] -4 0 4
#[3,] -4 0 4
#[4,] -4 0 4https://stackoverflow.com/questions/65225152
复制相似问题