使矩阵对称

时间:2015-04-24 21:00:53

标签: r matrix

我有一个根据理论应该是对称的矩阵,但在我的数据中可能不会被观察为对称的。我想通过使用两个比较单元格的最大值来强制对称。

login: function() {
    return new Promise((resolve, reject) => {
        this.get("ref").authWithOAuthPopup("facebook", function(error, user) {
            if (user) {
                resolve(user);
            } else {
                reject(error);
            }
        });
    });
},

使用双循环很容易做到这一点。

test_matrix <- matrix(c(0,1,2,1,0,1,1.5,1,0), nrow = 3)
test_matrix
#>     [,1] [,2] [,3]
#>[1,]    0    1  1.5
#>[2,]    1    0  1.0
#>[3,]    2    1  0.0

但我的矩阵大于$ 3x3 $,而R的循环问题已有详细记录。我也有兴趣让我的代码尽可能干净。事实上,我考虑将其放在code golf上,但这是一个我认为其他人可能感兴趣的真正问题。

我见过this one以及this one,但我的不同之处在于那些操作似乎实际上有一个只需要重新排序的对称矩阵,我有一个我需要的矩阵变得对称。

1 个答案:

答案 0 :(得分:8)

您可以使用pmax(),它返回一对向量的元素最大值。

pmax(test_matrix, t(test_matrix))
#      [,1] [,2] [,3]
# [1,]    0    1    2
# [2,]    1    0    1
# [3,]    2    1    0

它可以使用一对矩阵,因为:(1)在R中,矩阵只是&#39;只是&#39;具有附加(维度)属性的向量; (2)用于实现pmax()的代码非常好,可以将它的第一个参数的属性重新附加到它返回的值。