2013-01-10 95 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]返回矩陣的第一列也是唯一一列作爲向量。沒有循環涉及。