簡體   English   中英

從稀疏矩陣導入時出現 Modin AttributeError

[英]Modin AttributeError when importing from sparse matrix

我正在嘗試使用 Modin package 導入使用 scipy 創建的稀疏矩陣(特別是 scipy.sparse.csr_matrix)。

調用方法:

from modin import pandas as pd
pd.DataFrame.sparse.from_spmatrix(mat)

我收到以下屬性錯誤:

AttributeError                            Traceback (most recent call last)
C:\Users\BERGAM~1\AppData\Local\Temp/ipykernel_37436/3032405809.py in <module>
----> 1 pd.DataFrame.sparse.from_spmatrix(mat)

C:\Miniconda3\envs\persolite_v0\lib\site-packages\modin\pandas\accessor.py in from_spmatrix(cls, data, index, columns)
    109     @classmethod
    110     def from_spmatrix(cls, data, index=None, columns=None):
--> 111         return cls._default_to_pandas(
    112             pandas.DataFrame.sparse.from_spmatrix, data, index=index, columns=columns
    113         )

C:\Miniconda3\envs\persolite_v0\lib\site-packages\modin\pandas\accessor.py in _default_to_pandas(self, op, *args, **kwargs)
     78             Result of operation.
     79         """
---> 80         return self._parent._default_to_pandas(
     81             lambda parent: op(parent.sparse, *args, **kwargs)
     82         )

AttributeError: 'function' object has no attribute '_parent'

在使用原始 pandas API 時,它可以工作。

有類似問題的人嗎? 感謝您的支持

這是一個錯誤。 此 package 中的代碼使用類方法調用實例方法,因此self引用未綁定到推理,而是對第一個參數(這里是一個函數)的引用。

這是失敗的代碼:

class BaseSparseAccessor:
    
    def _default_to_pandas(self, op, *args, **kwargs):
        return self._parent._default_to_pandas(
            lambda parent: op(parent.sparse, *args, **kwargs)
        )

class SparseFrameAccessor(BaseSparseAccessor):

    @classmethod
    def from_spmatrix(cls, data, index=None, columns=None):
        return cls._default_to_pandas(
            pandas.DataFrame.sparse.from_spmatrix, data, index=index, columns=columns
        )

失敗原因的簡單示例如下:

class A:
    
    _parent = 0
    
    def a_method(self, op, **args):
        self._parent = op(self._parent, **args)

class B(A):
    
    @classmethod
    def b_method(cls, data, **args):
        return cls.a_method(sum, data, **args)

當您調用b_method時(無論 B 是否實例化為實例都無關緊要),它將失敗,因為a_method中的self是 function sum而不是 class 或實例引用。

>>> B.b_method(20)

AttributeError                            Traceback (most recent call last)
<ipython-input-17-3914ce57d001> in <module>
----> 1 B.b_method(20)

<ipython-input-11-a25ce2c0614c> in b_method(cls, data, **args)
     12     @classmethod
     13     def b_method(cls, data, **args):
---> 14         return cls.a_method(sum, data, **args)

<ipython-input-11-a25ce2c0614c> in a_method(self, op, **args)
      6 
      7     def a_method(self, op, **args):
----> 8         self._parent = op(self._parent, **args)
      9 
     10 class B(A):

AttributeError: 'builtin_function_or_method' object has no attribute '_parent'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM