2016-09-18 69 views
0

對於下面的代碼,墊是陣列類型的矩陣,Python:當我使用'from scipy.sparse import *'時'kron'創建稀疏矩陣嗎?

a = kron(Mat,ones((8,1))) 
b = a.flatten() 

如果我不導入scipy.sparse包,a陣列類型的矩陣b也可以被執行。 如果我使用'from scipy.sparse import *',a稀疏型矩陣,b不能執行。 有人可以告訴我爲什麼kron給出不同的結果? 而且,flatten()是否可以應用於稀疏型矩陣?

+3

使用'from scipy import sparse'和'sparse.kron ...'或'np.kron ...',這樣就沒有混淆。你也可以打印'a'來判斷它是密集的還是稀疏的。 – hpaulj

+0

謝謝! @hpaulj,你的意思是'kron'存在於包''scipy.sparse''和'numpy'嗎? –

回答

2

from module import *被普遍認爲是在應用程序代碼中狀態不佳,你所看到的原因 - 這使得它很難說哪個模塊的功能是從哪裏來的,特別是如果你超過一個模塊做

現在,您有:

from numpy import * 
# from scipy.sparse import * 
a = kron(Mat,ones((8,1))) 
b = a.flatten() 

取消註釋第二行可能會影響地方oneskron從何而來。但是,除非你看到稀疏重新定義這些,否則你不會知道。不如把它寫這樣的:

import numpy as np 
from scipy import sparse 
a = np.kron(Mat, np.ones((8,1))) 
b = a.flatten() 

然後你就可以sparse交換np要使用稀疏的版本,讀者會立刻知道你正在使用哪一個。如果你嘗試使用稀疏版本,而實際上沒有一個版本,你會得到一個錯誤。

+0

非常感謝!這對我很有幫助。 –