При вашем текущем подходе x
будет содержать 16777216 (256 3 ) элементов. Вы уверены, что вам нужно построить столько точек на графике? Если нет, подумайте о том, чтобы взять какой-то образец, например, вы можете сократить его до 4096 образцов, просто заменив xrange(256)
на xrange(0, 256, 16)
.
Если 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
.