2013-01-10 57 views
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中做到这一点?

+0

对不起,忘了添加返回矩阵2;这个矩阵共有2列,第一列有字母,第二列有数字。 – 2013-01-10 16:47:57

+0

它应该总是使用对角线还是始终使用每一行中的最高值? (正如它写的那样模糊) –

回答

0

假设在文件F2的文件F1矩阵,向量和下面的脚本文件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 
+0

非常感谢!这工作很好! – user30012

1

如果你的矩阵是m1m2你问什么是简单地说:

diag(m1) - m2[,1] 

diag() g给你一个矩阵的对角线,m2[,1]返回矩阵的第一列也是唯一一列作为向量。没有循环涉及。