我在Python中有3個循環的問題。 該代碼的目的是根據(x)未知值的數量(DATA)計算稀疏矩陣。這裏,x數是13,這意味着DATA的非重複值:(0,4,8,12,16,20,21,22,23,24,25,26,27)。然後,len(DATA)是4,表示A_sparse矩陣的行數。然後,我創建了具有形狀的稀疏零矩陣(4,13)。然後,我將部分的值設爲A_sparse如果x等於未知值。如何避免循環稀疏矩陣?
問題
- 此代碼正常工作,但與循環!我應該刪除循環,但是 怎麼樣?
在這裏,我把下面的例子:
輸入:
- DATA - 表示指數; [[24,20,21,22,23],[24,25,26,27],[25,26,27,23],[0,4,8,12,16,20]]
- PORTION - [[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使用循環,所以,我想消除環路,使這個代碼更短,速度更快。 任何答案將不勝感激!
嘗試[這裏](http://docs.scipy.org/doc/scipy/reference/sparse.html)即SciPy稀疏矩陣包。 –
Kobi,謝謝,我翻翻了!但是,我不熟悉Scipy稀疏矩陣工具,我只知道數學,但我不能真正將其轉換爲我上面提到的問題..?我怎樣才能做到這一點?? – Spider
我在我的答案中增加了一個稀疏的例子 – hpaulj