我正在使用SciPy处理稀疏矩阵数组,有时一些矩阵没有行或列(即shape = (0,0)
)。我希望我的各种其他函数可以忽略这些矩阵,或者执行其他一些智能默认操作。
似乎我不能使用任何稀疏矩阵格式,因为它们抱怨“无效形状”。出于某种原因,matrix([])
和matrix([[]])
有shape = (1,0)
,所以这些都不太好(实际上,这是一个错误吗?这没什么意义......)。
我知道我可以使用None
,[]
,array([])
或类似内容。然而,标准矩阵操作函数在交付时会失败,这意味着我需要分散
if block is not None:
在我的代码中或类似的。
是否有一个我错过的矩阵类,这将允许我优雅地处理这些情况?
对于任何好奇的人:这是通过变量类型将有限元Jacobian matrix切割成块来实现的。其中一些变量可以固定(固定为常数值),因此没有衍生物。因此雅各比派中没有条目。
答案 0 :(得分:3)
是。你可以做到
from scipy import sparse
result = sparse.eye(0)
# result.shape = (0, 0)
答案 1 :(得分:1)
矩阵([[]]) - > shape =(1,0)非常有意义;你给它一行,零列;怎么numpy应该猜测你真正想要的是零行呢?
所有数组创建函数(如np.zeros((0,0))都可以用于您的目的。
答案 2 :(得分:1)
有很多方法可以创建0x0稀疏矩阵。例如,
In [16]: from scipy.sparse import csr_matrix, coo_matrix, dok_matrix, eye
In [17]: csr_matrix(([], [[],[]]), shape=(0,0))
Out[17]:
<0x0 sparse matrix of type '<type 'numpy.float64'>'
with 0 stored elements in Compressed Sparse Row format>
In [18]: coo_matrix(([],[[],[]]), shape=(0,0))
Out[18]:
<0x0 sparse matrix of type '<type 'numpy.float64'>'
with 0 stored elements in COOrdinate format>
In [19]: dok_matrix((0,0))
Out[19]:
<0x0 sparse matrix of type '<type 'numpy.float64'>'
with 0 stored elements in Dictionary Of Keys format>
In [20]: eye(0)
Out[20]:
<0x0 sparse matrix of type '<type 'numpy.float64'>'
with 0 stored elements (1 diagonals) in DIAgonal format>
In [21]: csr_matrix(np.zeros((0, 0)))
Out[21]:
<0x0 sparse matrix of type '<type 'numpy.float64'>'
with 0 stored elements in Compressed Sparse Row format>
你说你正在砍掉雅可比矩阵。如果你索引 一个稀疏矩阵,切片长度为零,你会得到 一个0x0的结果:
In [22]: a = np.random.randint(0, 2, size=(10,10))
In [23]: m = csr_matrix(a)
In [24]: m[3:3, 3:3]
Out[24]:
<0x0 sparse matrix of type '<type 'numpy.int64'>'
with 0 stored elements in Compressed Sparse Row format>
(我正在使用scipy 0.13.2。)
有些稀疏操作可能无法正确处理0x0矩阵,这可能是一个错误。如果您有一些示例,可以将它们添加到您的问题中吗?
答案 3 :(得分:0)
您可以尝试以下代码,这很容易。
将numpy导入为np np.zeros((0,0))