bugfix> python > 投稿

残念ながら古いnumpyバージョン 1.8.2 、次の動作が発生します。

値として8つの疎なCSR行列を含む辞書があります。

>>> tmp = [ (D[key][select,:].T.sum(0))[:,:,None] for key in D ];

この時点まで、問題はありません。リストには、形状 (1,len(select),1) の密な2D numpy行列が含まれています 。ザ・ len(select)  300未満です。メモリ消費量は約3%で、使用可能なRAMは約7 GBです。

>>> result = np.concatenate(tmp,axis=2);

瞬く間に、端末からセグメンテーションフォールト( 'Speicherzugriffsfehler')が表示されます。  メモリがいっぱいになっているか、何でも実行されていること。また、消費量は以前の約2倍を超えてはならず、実際には何もなかったと思います。それでも、何度でも繰り返すことができ、常にSegFaultが発生します。

それが私の実装の問題であることを除外したい。

更新:numpyをバージョン1.10にわずかに更新した後、問題は発生しなくなったようです。多分1.8.2の深刻なバグで、完全に時代遅れなので誰も気にしないかもしれません...

htop
回答 1 件
  • コードを見ると、奇妙なことが起こっています(1.16でも)

    サンプルの疎行列から始めます:

    In [365]: M                                                                          
    Out[365]: 
    <10x10 sparse matrix of type '<class 'numpy.float64'>'
        with 20 stored elements in Compressed Sparse Row format>
    In [366]: M[0,:].T                                                                   
    Out[366]: 
    <10x1 sparse matrix of type '<class 'numpy.float64'>'
        with 3 stored elements in Compressed Sparse Column format>
    In [367]: M[0,:].T.sum(0)      
    
    

    スパース行列の行または列の合計は np.matrix を生成します 。

    Out[367]: matrix([[1.91771869]])
    In [368]: M[0,:].T.sum(0)[:,:,None]                                              
    Out[368]: matrix([[[1.91771869]]])
    
    

    np.matrix を展開することはできません  3Dへ。これが連結で問題を引き起こしている可能性がありますか?今ではありませんが、以前のバージョンにある可能性があります

    In [369]: np.concatenate([M[0,:].T.sum(0)[:,:,None]])   
    Out[369]: matrix([[1.91771869]])
    In [370]: _368.shape                                                                 
    Out[370]: (1, 1, 1)  
    In [371]: np.concatenate([_368,_368])                                                
    Out[371]: matrix([[1.91771869, 1.91771869]])
    
    

    ほんの数日前、3d np.matrix を生成する質問を見ました 、あるべきではないとき。

    このNumpy行列にインデックスを付けるとエラーが発生するのはなぜですか?

あなたの答え