


Sebagai pengarang yang prolifik, saya menjemput anda untuk meneroka koleksi buku Amazon saya. Ingat untuk mengikuti saya di Medium untuk mendapatkan kemas kini dan tunjukkan sokongan anda! Dorongan anda amat dihargai!
Python yang semakin menonjol dalam sains data dan pembelajaran mesin memerlukan pengurusan memori yang cekap untuk projek berskala besar. Saiz set data yang berkembang dan permintaan pengiraan yang semakin meningkat menjadikan penggunaan memori yang dioptimumkan menjadi kritikal. Pengalaman saya dengan aplikasi Python intensif memori telah menghasilkan beberapa strategi pengoptimuman yang berkesan, yang akan saya kongsikan di sini.
Kita akan mulakan dengan NumPy, perpustakaan asas untuk pengiraan berangka. Tatasusunan NumPy menawarkan kelebihan memori yang besar berbanding senarai Python, terutamanya untuk set data yang luas. Peruntukan memori bersebelahan mereka dan penaipan statik meminimumkan overhed.
Pertimbangkan perbandingan ini:
import numpy as np import sys # Creating a list and a NumPy array with 1 million integers py_list = list(range(1000000)) np_array = np.arange(1000000) # Comparing memory usage print(f"Python list size: {sys.getsizeof(py_list) / 1e6:.2f} MB") print(f"NumPy array size: {np_array.nbytes / 1e6:.2f} MB")
Jejak memori tatasusunan NumPy yang lebih kecil akan dapat dilihat dengan jelas. Perbezaan ini menjadi lebih ketara dengan set data yang lebih besar.
NumPy juga menyediakan operasi yang cekap ingatan. Daripada menjana tatasusunan baharu untuk setiap operasi, ia sering mengubah suai tatasusunan di tempat:
# In-place operations np_array += 1 # Modifies the original array directly
Beralih kepada Panda, jenis data kategori adalah kunci kepada pengoptimuman memori. Untuk lajur rentetan dengan nilai unik terhad, menukar kepada jenis kategori secara drastik mengurangkan penggunaan memori:
import pandas as pd # DataFrame with repeated string values df = pd.DataFrame({'category': ['A', 'B', 'C'] * 1000000}) # Memory usage check print(f"Original memory usage: {df.memory_usage(deep=True).sum() / 1e6:.2f} MB") # Conversion to categorical df['category'] = pd.Categorical(df['category']) # Post-conversion memory usage print(f"Memory usage after conversion: {df.memory_usage(deep=True).sum() / 1e6:.2f} MB")
Penjimatan memori boleh menjadi besar, terutamanya dengan set data besar yang mengandungi rentetan berulang.
Untuk set data yang jarang, Pandas menawarkan struktur data yang jarang, hanya menyimpan nilai bukan nol, menghasilkan penjimatan memori yang ketara untuk set data dengan banyak nilai nol atau sifar:
# Creating a sparse series sparse_series = pd.Series([0, 0, 1, 0, 2, 0, 0, 3], dtype="Sparse[int]") print(f"Memory usage: {sparse_series.memory_usage(deep=True) / 1e3:.2f} KB")
Apabila set data melebihi RAM yang tersedia, fail yang dipetakan memori adalah transformatif. Mereka membenarkan bekerja dengan fail besar seolah-olah ia berada dalam ingatan, tanpa memuatkan keseluruhan fail:
import mmap import os # Creating a large file with open('large_file.bin', 'wb') as f: f.write(b'0' * 1000000000) # 1 GB file # Memory-mapping the file with open('large_file.bin', 'r+b') as f: mmapped_file = mmap.mmap(f.fileno(), 0) # Reading from the memory-mapped file print(mmapped_file[1000000:1000010]) # Cleaning up mmapped_file.close() os.remove('large_file.bin')
Ini amat berguna untuk akses rawak pada fail besar tanpa memuatkannya sepenuhnya ke dalam memori.
Ekspresi penjana dan itertools
berkuasa untuk pemprosesan data yang cekap memori. Mereka membenarkan memproses set data yang besar tanpa memuatkan semuanya ke dalam memori serentak:
import itertools # Generator expression sum_squares = sum(x*x for x in range(1000000)) # Using itertools for memory-efficient operations evens = itertools.islice(itertools.count(0, 2), 1000000) sum_evens = sum(evens) print(f"Sum of squares: {sum_squares}") print(f"Sum of even numbers: {sum_evens}")
Teknik ini meminimumkan overhed memori semasa memproses set data yang besar.
Untuk bahagian kod yang kritikal prestasi, Cython menawarkan potensi pengoptimuman yang ketara. Menyusun kod Python kepada C menghasilkan peningkatan kelajuan yang ketara dan potensi pengurangan memori:
def sum_squares_cython(int n): cdef int i cdef long long result = 0 for i in range(n): result += i * i return result # Usage result = sum_squares_cython(1000000) print(f"Sum of squares: {result}")
Fungsi Cython ini akan mengatasi rakan Python tulennya, terutamanya untuk nilai n
yang besar.
PyPy, pengkompil Just-In-Time, menawarkan pengoptimuman memori automatik. Ia amat berfaedah untuk program yang berjalan lama, selalunya mengurangkan penggunaan memori dengan ketara:
import numpy as np import sys # Creating a list and a NumPy array with 1 million integers py_list = list(range(1000000)) np_array = np.arange(1000000) # Comparing memory usage print(f"Python list size: {sys.getsizeof(py_list) / 1e6:.2f} MB") print(f"NumPy array size: {np_array.nbytes / 1e6:.2f} MB")
PyPy boleh membawa kepada kecekapan dan kelajuan memori yang lebih baik berbanding CPython standard.
Profil memori adalah penting untuk mengenal pasti peluang pengoptimuman. Pustaka memory_profiler
ialah alat yang berharga:
# In-place operations np_array += 1 # Modifies the original array directly
Gunakan mprof run script.py
dan mprof plot
untuk menggambarkan penggunaan memori.
Mengatasi kebocoran memori adalah penting. Modul tracemalloc
(Python 3.4 ) membantu mengenal pasti sumber peruntukan memori:
import pandas as pd # DataFrame with repeated string values df = pd.DataFrame({'category': ['A', 'B', 'C'] * 1000000}) # Memory usage check print(f"Original memory usage: {df.memory_usage(deep=True).sum() / 1e6:.2f} MB") # Conversion to categorical df['category'] = pd.Categorical(df['category']) # Post-conversion memory usage print(f"Memory usage after conversion: {df.memory_usage(deep=True).sum() / 1e6:.2f} MB")
Ini menentukan bahagian kod intensif memori.
Untuk aplikasi yang sangat intensif memori, pengurusan memori tersuai mungkin diperlukan. Ini mungkin melibatkan kumpulan objek untuk kegunaan semula objek atau cache tersuai:
# Creating a sparse series sparse_series = pd.Series([0, 0, 1, 0, 2, 0, 0, 3], dtype="Sparse[int]") print(f"Memory usage: {sparse_series.memory_usage(deep=True) / 1e3:.2f} KB")
Ini meminimumkan penciptaan/pemusnahan objek di atas kepala.
Untuk set data yang sangat besar, pertimbangkan pustaka pengiraan luar teras seperti Dask:
import mmap import os # Creating a large file with open('large_file.bin', 'wb') as f: f.write(b'0' * 1000000000) # 1 GB file # Memory-mapping the file with open('large_file.bin', 'r+b') as f: mmapped_file = mmap.mmap(f.fileno(), 0) # Reading from the memory-mapped file print(mmapped_file[1000000:1000010]) # Cleaning up mmapped_file.close() os.remove('large_file.bin')
Dask mengendalikan set data yang lebih besar daripada RAM yang tersedia dengan membahagikan pengiraan kepada bahagian yang lebih kecil.
Pengoptimuman algoritma juga penting. Memilih algoritma yang cekap boleh mengurangkan penggunaan memori dengan ketara:
import itertools # Generator expression sum_squares = sum(x*x for x in range(1000000)) # Using itertools for memory-efficient operations evens = itertools.islice(itertools.count(0, 2), 1000000) sum_evens = sum(evens) print(f"Sum of squares: {sum_squares}") print(f"Sum of even numbers: {sum_evens}")
Fungsi Fibonacci yang dioptimumkan ini menggunakan ingatan berterusan, tidak seperti pelaksanaan rekursif yang naif.
Ringkasnya, pengoptimuman memori Python yang berkesan menggabungkan struktur data yang cekap, perpustakaan khusus, pengekodan cekap memori dan algoritma yang sesuai. Teknik ini mengurangkan jejak memori, membolehkan pengendalian set data yang lebih besar dan pengiraan yang lebih kompleks. Jangan lupa untuk memprofilkan kod anda untuk mengenal pasti kesesakan dan memfokuskan usaha pengoptimuman di mana ia akan memberi impak yang paling besar.
101 Buku
101 Buku, sebuah rumah penerbitan berkuasa AI yang diasaskan bersama oleh pengarang Aarav Joshi, memanfaatkan AI untuk meminimumkan kos penerbitan, menjadikan pengetahuan berkualiti boleh diakses (sesetengah buku adalah serendah $4!).
Cari buku Kod Bersih Golang kami di Amazon.
Untuk kemas kini dan lebih banyak tajuk, cari Aarav Joshi di Amazon. Diskaun istimewa boleh didapati melalui [pautan].
Ciptaan Kami
Terokai ciptaan kami:
Pusat Pelabur | Pelabur Central Spanish | Pelabur Jerman Tengah | Hidup Pintar | Epos & Gema | Misteri Membingungkan | Hindutva | Pembangunan Elit | Sekolah JS
Kami berada di Sederhana
Tech Koala Insights | Dunia Epok & Gema | Medium Pusat Pelabur | Medium Misteri Membingungkan | Sains & Zaman Sederhana | Hindutva Moden
Atas ialah kandungan terperinci Menguasai Pengoptimuman Memori Python: Teknik untuk Sains Data dan Pembelajaran Mesin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

Artikel ini membimbing pemaju Python mengenai bangunan baris baris komando (CLI). Butirannya menggunakan perpustakaan seperti Typer, Klik, dan ArgParse, menekankan pengendalian input/output, dan mempromosikan corak reka bentuk mesra pengguna untuk kebolehgunaan CLI yang lebih baik.

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Artikel ini membincangkan perpustakaan Python yang popular seperti Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask, dan Permintaan, memperincikan kegunaan mereka dalam pengkomputeran saintifik, analisis data, visualisasi, pembelajaran mesin, pembangunan web, dan h

Artikel ini membincangkan peranan persekitaran maya di Python, memberi tumpuan kepada menguruskan kebergantungan projek dan mengelakkan konflik. Ia memperincikan penciptaan, pengaktifan, dan faedah mereka dalam meningkatkan pengurusan projek dan mengurangkan isu pergantungan.

Ekspresi biasa adalah alat yang berkuasa untuk memadankan corak dan manipulasi teks dalam pengaturcaraan, meningkatkan kecekapan dalam pemprosesan teks merentasi pelbagai aplikasi.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.