簡體   English   中英

嘗試對Numpy Ndarray對象求和時,Python中出現內存錯誤

[英]Memory Error in Python when trying to sum through Numpy Ndarray Object

我有一個巨大的numpy ndarray(稱為mat ,其形狀為700000 x 6000),我想通過列求和以找到非零索引。

我想這樣總結一下:

x =  np.sum(mat[:,y], axis=1)
indices = np.nonzero(x)

但是第一行立即給我一個即時的內存錯誤。 有沒有辦法我可以使用np.sum來做另一種使這種計算成為可能的方式?

您有兩個問題:

  1. 請參閱Sven Marnach的評論,可能您的數據集對於硬件而言過大
  2. 參見ajcr的評論,您想要做的事情並不可行,因為符號mat[:,an_index]為您提供了一個維數數組,其唯一的軸是axis=0

另一個問題是數組的性質,如果它是一個浮點數數組,那么700,000個條目的總和完全等於零的概率接近於零……這當然不是不可能,但可以肯定的是。

也就是說,如果您可以減少數據集或改善硬件,則可以這樣做

In [39]: a = np.zeros((10,5))

In [40]: for i in range(5): a[3,i]=1+2*i if i != 3 else 0.0

In [41]: a
Out[41]: 
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 1.,  3.,  5.,  0.,  9.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

In [42]: np.sum(a,axis=0)
Out[42]: array([ 1.,  3.,  5.,  0.,  9.])

In [43]: np.nonzero(np.sum(a,axis=0))
Out[43]: (array([0, 1, 2, 4]),)

In [44]: 

暫無
暫無

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

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