2016-04-08 70 views
1

我有一个类似于下面的矩阵。我想在一个函数中传递两个字母(“A”和“B”),然后查找它并将行A中的值返回给B列单元格(这将是2)。目前使用numpy。从行和列标题中查找值

"A"  "B"  "C" 
"A" 0  2  3 
"B" 2  0  4 
"C" 0  4  0 
+0

什么是你的数组dtype? – wim

+0

int64 - 头文件实际上也是int,但是打算用字母替换它们。不知道我是否可以在numpy中做到这一点。 – user1272052

+1

就是这样,你不能轻易地做你在numpy中描述的东西,所以这是一个令人困惑的问题。你可能对[pandas]感兴趣(http://pandas.pydata.org/)而不是 – wim

回答

0

你可以通过创建一个小帮手,以获得阵列开始从字母坐标:

import string 
import numpy as np 

x = np.array([[0, 2, 3], [2, 0, 4], [0, 4, 0]], np.int64) 
mapping = {letter:idx for (idx, letter) in enumerate(string.ascii_uppercase)} 

def coords(letter1, letter2): 
    """ assuming that the letters are always uppercase """ 
    return mapping[letter1], mapping[letter2] 

# now to get what you wanted: 
result = x[coords('A', 'B')] 
# or really short method: 
result = x[string.ascii_uppercase.index('A'), string.ascii_uppercase.index('B')] 

print result 

输出:

2 

你也可以跳过建立一个映射,只是做string.ascii_uppercase.index(<letter>)但有一个映射帮助,如果你真的使用coords助手真的密集。