1

我有两个矩阵,矩阵1:

mot A  B  C  D  E  
A   14 2  3  4  1  
B   2  21 2  1  8  
C   1  2  35 1  2  
D   2  4  4  28 1  
E   2  4  3  3  51  

和矩阵2:

A 12
B 20
C 30
D 25
E 40

在矩阵 1 中,最高值始终沿列和行标签相同的主对角线。对于这些值中的每一个,我想从矩阵 2 中减去相应的值。例如,在矩阵 1 中,C 行 C 列的条目是 35;我想从中减去矩阵 2 (30) 中 C 的条目。

有没有一种简单的方法可以做到这一点?我考虑过对每一列进行 1 乘 1 排序,然后仅从最高点击中提取值。但是,这需要自动化,因为文件实际上有 700 列和行。

可能最好的方法是在 R 中做到这一点?

4

2 回答 2

1

如果您的矩阵是m1并且m2您的要求很简单:

diag(m1) - m2[,1]

diag()为您提供矩阵的对角线,并将矩阵m2[,1]的第一列也是唯一一列作为向量返回。不涉及循环。

于 2013-01-10T18:20:42.980 回答
0

假设文件 f1 中的矩阵,文件 f2 中的向量和文件 script.py 中的以下脚本:

#!/usr/bin/env python

import sys

matrix = []
vector = []

for line in open(sys.argv[1]):
    matrix.append(line.strip().split())
for line in open(sys.argv[2]):
    vector.append(line.strip().split())

for i in range(1, len(matrix)):
    matrix[i][i] = int(matrix[i][i])-int(vector[i-1][1])
for i in range(0, len(matrix)):
    for j in matrix[i]:
        print j,
    print

跑:

$ python script.py f1 f2
于 2013-01-10T18:17:47.837 回答