在外部for循环中,我有k1
作为x坐标,而在内循环中我有k2
作为y坐标。循环基本上用于其他目的,即创建临时字典(用于其他目的)。所以,我无法删除循环结构。我正在尝试创建一个coo_matrix,其坐标为k1
,k2
,其值为我在内循环中计算的值。
以下是我的简要代码:
for k1,v1 in s.iteritems():
xdict[k1] = None
for k2,v2 in s.iteritems():
tempdict = {}
if k2 in xdict.keys():
continue
if k1 == k2:
continue
tempdict[k1] = v1
tempdict[k2] = v2
r = reduce(set.intersection, (set(val) for val in tempdict.values()))
new_kee = 'C(' + k1 + ',' + k2 + ')'
ydict[new_kee] = len(r)
输入's'是一个包含以下示例键和值的字典:
216 [234]
1305 [234, 234, 298, 429]
2961 [241, 264]
211 [143]
....
内部循环计算两个记录中每个记录的交集而不重复。在我的新词典中,交集结果的输出将被存储,例如:
c(216,1305) -> 1
c(216,2961) -> 0
c(216,211) -> 0
c(1305,2961) -> 0
c(1305,211) -> 0
c(2961,211) -> 0
...
此时,我想将值存储在稀疏的coo_matrix中,其坐标如上所示:
我需要帮助创建坐标len(r)
中值为(k1,k2)
的稀疏coo_matrix。我不确定是否必须在具有固定大小的所有循环结构之前创建矩阵,然后在循环内或以任何其他方式更新。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
这是我怎么做的。定义两个函数:
def new_matrix(n,m):
"""Create a new matrix of dimensions 'n' by 'm'."""
return [[0 for col in range(m)] for row in range(n)]
def update_matrix(matrix,row,col,val):
"""Update a matrix at row,col position with the value 'val'."""
matrix[row][col] = val
按如下方式更新您的代码:
#You need to know the size ahead of time
#Replace row, col with appropriate dimensions
matrix = new_matrix(row,col)
for k1,v1 in s.iteritems():
xdict[k1] = None
for k2,v2 in s.iteritems():
tempdict = {}
if k2 in xdict.keys():
continue
if k1 == k2:
continue
tempdict[k1] = v1
tempdict[k2] = v2
r = reduce(set.intersection, (set(val) for val in tempdict.values()))
new_kee = 'C(' + k1 + ',' + k2 + ')'
ydict[new_kee] = len(r)
#Update your matrix here:
update_matrix(matrix,k1,k2,len(r))