我有以下问题:让L成为i和j在1和N之间的列表((i,j),w_i,j)。假设我们知道这对(i,j)(例如:(5) ,8)),有没有办法只从列表L中找到w_5,8? 注意:如果我使用liste L而不是矩阵w [i] [j],我的代码是先验的,因为它基本上是空的,所以我宁愿不使用这样的矩阵。
提前致谢
答案 0 :(得分:0)
有很多方法可以存储和查找(稀疏)矩阵的值,我认为这是目标。
不要尝试尽早优化。根据您希望在矩阵上执行的计算类型,最好建议您只使用numpy array并且不要担心稀疏性。
如果您的矩阵非常大并且确实稀疏,则可以使用scipy的专用稀疏矩阵实现。
您已经拥有所描述格式的列表L
,并且您不想使用上面提到的任何数字包。然后,您可以将L
转换为字典以便于查找值:
# example list
L = [((1,2), 456.5), ((5,4), 33.5)]
# convert to dictionary
D = dict(L)
# lookup
v = D[(1,2)] # v is now 456.5
# missing value
v = D[(3,3)] # throws KeyNotFound exception
# convert to dictionary with default value for missing keys
from collections import defaultdict
D = defaultdict(int, L)
# lookup
v = D[(1,2)] # v is now 456.5
# missing value
v = D[(3,3)] # v is now 0