排序和减去特定值

时间:2013-01-10 16:44:14

标签: r

我有两个矩阵,矩阵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?

中这样做

2 个答案:

答案 0 :(得分:1)

如果你的矩阵是m1m2,你问的只是:

diag(m1) - m2[,1]

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

答案 1 :(得分: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