Kezdőoldal » Számítástechnika » Programozás » Pythonba numpyal hogyan...

Pythonba numpyal hogyan darabolhatok fel egy 2 dimenziós tömböt kisebb "négyzetekre"?

Figyelt kérdés
Egy két dimenziós tömböt szeretnék úgy felbontani, hogy pl egy 50x50es négyzetet kivágjon és egy egy dimenziós tömböt csináljon belőle. Tehát ha van egy 400x400 as array akkor azt át kéne alakítani minél gyorsabban egy 64x2500as tömbbe úgy, hogy az első (a 64 ből) az eredeti array első 50x50es négyzet elemeit tartalmazza, a másadik a másadik négyzetét és így tovább. Numpy tudom, hogy tud ilyeneket csinálni anélkül, hogy plusz memóriát kéne foglaljon csak nem tudom hogy és elég fontos, hogy minél gyorsabb legyen. Előre is köszönöm a válaszokat.

2020. szept. 15. 17:04
 1/7 anonim ***** válasza:
0%
Ehhez miert kell numpy?
2020. szept. 15. 17:38
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
Mint mondtam gyors kell legyen a program és a numpy jóval gyorsabb mint az alap és mert mint mondtam vannak függvényei amik nagyon jól optimalizáltak. Ha tudnál válaszolni szerintem ezt is tudnád.
2020. szept. 15. 18:34
 3/7 anonim ***** válasza:
0%

"Mint mondtam gyors kell legyen a program"


Akkor nem Pythonnal csinálod :)

2020. szept. 15. 19:02
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Köszönöm az újabb értelmes választ.
2020. szept. 15. 19:04
 5/7 anonim ***** válasza:

A függvény, amit keresel, az a reshape.



import numpy as np


a = np.random.randint(1,100,(20, 20))

a.reshape((40,10))

2020. szept. 15. 19:36
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:

Nem a reshapet keresem, mert az veszi az eredeti mátrix első 40 elemét és azt teszi külön sorba, viszont nekem négyzetekként kéne rendezze.


Példa 2x2es négyzetekre:

Erre:

[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],

[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],

[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],

[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],

[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],

[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],

[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],

[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],

[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]


Ezt kéne kapjam:

[[0, 1, 10, 11],

[2, 3, 12, 13],

[4, 5, 14, 15],

...

[88, 89, 98, 99]]


Remélem így érthetőbb.

2020. szept. 15. 19:52
 7/7 anonim ***** válasza:

Igen. Így már világos. Ez egy eleggé specifikus use case, ilyenre nem tudok direkt megoldást, de szét lehet szedni a feladatot részlépésekre. Tehát nagyjából ezt kell csinálni:

1) felosztani a nagy mátrixot kicsikre.

2) A kis mátrixokat flatten-eled 1D tömbökké.

3) Ezeket újra konkatenálod, majd reshape.


Ez a kod ezt csinálja: [link]

2020. szept. 15. 21:38
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!