Tablica 2d - lista list.

0

Dzień dobry,
potrzebuję wczytać z pliku graficznego .pgm wszystkie piksele z obrazka w celu dalszej obróbki, więc pobieram z nagłówka wysokość i szerokość obrazka a następnie chciałbym utworzyć listę list. Mój kod przerósł moje oczekiwania;)
spodziewałem się listy 10 elementów i każdy składających się z 20 elementów.
tymczasem :

Komentarz zawarty w pliku:

die nazwe.pgm

X = 20
Y = 10
ilosc pikselki = 200
-> pdb.set_trace()

(Pdb) len(wiersz)
1791
(Pdb) len(kolumna)
34029
(Pdb) =

wiersz=[]
kolumna=[]
for i in range(0,(len(piksele)-1)):
	for x in range(0,(int(wymiary[1])-1)):
		wiersz.append(kolumna)
		for y in range(0,(int(wymiary[0])-1)):
			kolumna.append(piksele[i])

Czy mógłby mi ktoś wytłumaczyć skąd się biorą takie duże rozmiary powstałych list?

0

Tzn. jesteś świadom że na początku pliku nie ma danych? Poczytaj https://tools.ietf.org/html/rfc3208 co się znajduje na początku pliku. I trzeba od pewnego momentu dopiero czytać dane by dostać pixele z kolorami

0
Dregorio napisał(a):

Tzn. jesteś świadom że na początku pliku nie ma danych? Poczytaj https://tools.ietf.org/html/rfc3208 co się znajduje na początku pliku. I trzeba od pewnego momentu dopiero czytać dane by dostać pixele z kolorami

Tak wiem, napisałem funkcję która odczytuje dane z nagłówka. Później kopiuję fragment z pikselami do listy pojedynczych pikseli, ale później chcę zapisać każdy wiersz jako osobny element listy wierszu i to miała robić moja pętla zagnieżdżona..

0

Weź sobie rozpisz krok po kroku wynik działania tych pętli bo już na oko widać, że masz niepotrzebnie zagnieżdżone.

for i in range(0,(len(piksele)-1)):

200-1 iteracji

for x in range(0,(int(wymiary[1])-1)):
        wiersz.append(kolumna)

wymiary[1]-1 iteracji

for y in range(0,(int(wymiary[0])-1)):
            kolumna.append(piksele[i]

wymiary[0] -1 iteracji

Ostatecznie kolumna.append zostanie wywołana (wymiary[0]-1) * (wymiary[1]-1) * piksele razy. Czyli 19 * 9 * 199 = 34029. Opisz dokładnie jakie masz dane i co chcesz zuzyskać bo podejrzewam, że da się to o wiele prościej i wydajniej uzyskać.

0

Ale jeżeli masz listę danych pikseli i chcesz stworzyć tablice x na y z tymi danymi to najłatwiej tak:

'''
image = [[pixels[j*x+i] for i in range(y)] for j in range(x)]
'''

O ile nie pomyliłem się na wartościach granicznych to kolejno będzie brało wartości z piksels dla poszczególnych komórek. Np dla x=20, y=10 przy punkcie 4,5 sięgnie do 20 razy 3 (bo od 0) + 4 = 64 element pixels

1 użytkowników online, w tym zalogowanych: 0, gości: 1