【发布时间】:2013-10-21 04:06:41
【问题描述】:
我在 Python 中遇到了 3 个循环的问题。 这段代码的目的是根据DATA的(x)个未知值计算稀疏矩阵。这里,x 数是 13,这意味着 DATA 的不重复值:(0, 4, 8, 12, 16, 20, 21, 22, 23, 24, 25, 26, 27)。然后,len(DATA) 为 4,表示 A_sparse 矩阵的行数。然后,我创建具有形状(4,13)的稀疏零矩阵。然后,如果 x 等于未知值,我将 portion 值设为 A_sparse。
问题
- 这段代码可以正常工作,但是有循环!!!我应该删除循环,但是 怎么样?
这里,我举个例子:
输入:
- DATA - 表示索引; [[24, 20, 21, 22, 23], [24, 25, 26, 27], [25, 26, 27, 23], [0, 4, 8, 12, 16, 20]]
- 部分 - [[ 1.16950604, 0.08724138, 1.5326188 , 1.5326188 , 0.74587448], [0.44409055, 1.51394507, 1.51394507, 0.95883188], [0.77097384, 1.77917041, 0.14615981, 0.185952], [0.93, 1.5, 1.5, 1.5, 1.5, 0.07]]
输出: - A_sparse - 稀疏矩阵;
def get_sparse(DATA, PORTION):
x = np.unique( flatten(DATA) )
A = np.zeros((len(DATA), len(x)))
for i in range(len(DATA)):
for m1,m2 in enumerate(DATA[i]):
for j,k in enumerate(x):
if float(m2) == float(k):
A[i][j] = PORTION[i][m1]
return A
>>> get_sparse(DATA, PORTION)
array([[ 0. , 0. , 0. , 0. , 0. ,
0.08724138, 1.5326188 , 1.5326188 , 0.74587448, 1.16950604,
0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.44409055,
1.51394507, 1.51394507, 0.95883188],
[ 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.185952 , 0. ,
0.77097384, 1.77917041, 0.14615981],
[ 0.93 , 1.5 , 1.5 , 1.5 , 1.5 ,
0.07 , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ]])
我在使用 Python 时通常不喜欢使用循环,因此,我想删除循环以使这段代码更短、更快。 任何答案将不胜感激!
【问题讨论】:
-
试试here 那是 SciPy 稀疏矩阵包。
-
科比,谢谢,我看过了!但是,我不熟悉 Scipy 稀疏矩阵工具,我只知道数学,但我不能真正将它转换为我上面提到的问题..?我该怎么做??
-
我在答案中添加了一个
sparse示例
标签: python numpy sparse-matrix