我有两个矩阵,矩阵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 :(得分:1)
如果你的矩阵是m1
和m2
,你问的只是:
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