簡體   English   中英

在python2.7中附加大列表

[英]Append large lists in python2.7

我正在使用matplotlib在i軸上繪制帶有點([0,0,0],[0,0,1],[0,0,2],... [255,255,255])的圖正在使用清單:

from mpl_toolkits.mplot3d import Axes3D
x=[]
for i,j,k in product(xrange(256), repeat=3):
    x.append([i,j,k])
y=[]
for count in x:
   y.append(probability[count]) # this is how my probability array is stored

pylab.figure(0)
pylab.plot(x,y,'b')
pylab.show()

我從以前的帖子中借鑒了這個想法。 我是python的新手,所以請幫忙。 問題是上面的代碼給出了“內存錯誤”。 有人可以提供一種將元素附加到“ x”的有效方法

首先,我認為pylab.plot不會像您想的那樣工作,您是否嘗試在3d中顯示表面?

其次,您實際上應該使用ndarrays而不是大型列表。 我相信matplotlib無論如何都會將您的列表轉換為ndarrays,因此最好從數組開始。 我認為以下是您想要的。

x, y, z = np.mgrid[0:256, 0:256, 0:256]

最后, y是什么, probability是什么? 我問,因為對我來說, probability[x[count]]看起來很值得懷疑,我想也許您是指probability[count]但是即使這樣,如果probability是一個列表,那應該不起作用,並且如果它是一個數組,它會炸毀並可能導致您的內存錯誤。 (無法確定是否有痕跡)。

看看Matplotlib Gallery ,他們的示例附帶了代碼,它們對使事情正常工作非常有幫助。

按照您當前的方法, x中將包含16777216(256 3 )個元素。 您確定需要在圖形上繪制這么多點嗎? 如果不是,請考慮對其進行一些采樣,例如,您可以通過簡單地將xrange(256)替換為xrange(256) xrange(0, 256, 16) xrange(256)來將其縮減為4096個采樣。

如果matplotlib可以繪制可迭代對象而不是列表,則可以通過這樣做而不是創建列表來節省內存,它可能類似於以下內容:

from itertools import product, imap

def get_probability(count):
    return probability[x[count]]   # this code is broken, but from your example

x = product(xrange(256), repeat=3)
y = imap(get_probability, product(xrange(256), repeat=3))
pylab.plot(x, y, 'b')

正如我在上面的評論中指出的那樣, x[count]在您的示例中的以下代碼中將失敗:

for count in x:
    y.append(probability[x[count]])

這是因為x是列表的列表,所以count總是像[0, 0, 0]這樣的列表,因此在循環的第一步中,您將嘗試x[[0, 0, 0]]並得到一個TypeError: list indices must be integers, not list

x是否必須是列表列表? 可以是元組列表嗎?

如果可以,則可以簡化為:

x = list(product(xrange(256), repeat=3))

暫無
暫無

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

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