1
我有一个类似于下面的矩阵。我想在一个函数中传递两个字母(“A”和“B”),然后查找它并将行A中的值返回给B列单元格(这将是2)。目前使用numpy。从行和列标题中查找值
"A" "B" "C"
"A" 0 2 3
"B" 2 0 4
"C" 0 4 0
我有一个类似于下面的矩阵。我想在一个函数中传递两个字母(“A”和“B”),然后查找它并将行A中的值返回给B列单元格(这将是2)。目前使用numpy。从行和列标题中查找值
"A" "B" "C"
"A" 0 2 3
"B" 2 0 4
"C" 0 4 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
助手真的密集。
什么是你的数组dtype? – wim
int64 - 头文件实际上也是int,但是打算用字母替换它们。不知道我是否可以在numpy中做到这一点。 – user1272052
就是这样,你不能轻易地做你在numpy中描述的东西,所以这是一个令人困惑的问题。你可能对[pandas]感兴趣(http://pandas.pydata.org/)而不是 – wim