【问题标题】:what is the fastest way to initialise a scipy.sparse matrix with numpy.NaN?用 numpy.NaN 初始化 scipy.sparse 矩阵的最快方法是什么?
【发布时间】:2012-12-31 17:44:02
【问题描述】:

我想用 numpy 数组初始化一个稀疏矩阵。 numpy 数组包含 NaN 作为我的程序的零,初始化稀疏矩阵的代码如下:

a= np.array([[np.NaN,np.NaN,10]])
zero_a= np.array([[0,0,10]])
spr_a = lil_matrix(a)
zero_spr_a = lil_matrix(zero_a)
print repr(spr_a)
print repr(zero_spr_a)

输出是

'type'numpy.float64'' 类型的 1x3 稀疏矩阵 具有 3 个以链接列表格式存储的元素 'type'numpy.int64'' 类型的 1x3 稀疏矩阵 具有 1 个以链接列表格式存储的元素

对于 0 的数组,只有 1 个元素存储在稀疏矩阵中。但是NaN数组中存储了3个元素,如何将NaN视为scipy矩阵的零?

【问题讨论】:

    标签: python scipy


    【解决方案1】:

    如果您只想从数据中创建一个稀疏矩阵,将NaNs 视为零,您可以执行以下操作。首先,让我们创建一个包含多个np.nans 的随机数组:

    >>> nans = np.random.randint(0, 2, size=(5,5))
    >>> a = np.ones((5,5))
    >>> a = np.where(nans, np.nan, a)
    >>> a
    array([[  1.,   1.,   1.,   1.,  nan],
           [ nan,  nan,  nan,   1.,   1.],
           [ nan,  nan,   1.,   1.,  nan],
           [  1.,   1.,   1.,   1.,  nan],
           [  1.,  nan,   1.,  nan,  nan]])
    

    要使这个稀疏的 COO 格式,它很简单:

    >>> indices = np.nonzero(~np.isnan(a))
    >>> sps = scipy.sparse.coo_matrix((a[indices], indices), shape=a.shape)
    >>> sps
    <5x5 sparse matrix of type '<type 'numpy.float64'>'
        with 14 stored elements in COOrdinate format>
    

    并检查它们是否相同:

    >>> sps.toarray()
    array([[ 1.,  1.,  1.,  1.,  0.],
           [ 0.,  0.,  0.,  1.,  1.],
           [ 0.,  0.,  1.,  1.,  0.],
           [ 1.,  1.,  1.,  1.,  0.],
           [ 1.,  0.,  1.,  0.,  0.]])
    

    虽然你的NaNs 现在不见了...

    【讨论】:

      【解决方案2】:

      零作为稀疏矩阵中的空值的用法在代码中根深蒂固,因此很遗憾它不是很容易改变。

      首先,我会重新考虑将NaN 或其他值视为稀疏矩阵中的空值的必要性。也许您的代码中还有另一种方式?

      如果您确实必须更改稀疏矩阵中的空值,那么您必须基于lil_matrix 甚至spmatrix 定义一个新类。最重要的是,您需要更改方法get nnz(),它定义了非零点的数量。但是您还需要重新定义矩阵,因为它被转换为对象 dtype 的np.matrix,并且在此过程中清除了零。

      【讨论】:

        猜你喜欢
        • 2012-11-30
        • 2016-02-06
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        • 1970-01-01
        • 2010-09-17
        相关资源
        最近更新 更多