2016-09-18 67 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

非常感谢!这对我很有帮助。 –