1

私は2つの行列、行列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 つずつ並べ替えて、上位のヒットのみから値を抽出することを考えました。ただし、ファイルには実際には 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 に答える