cari
Rumahpembangunan bahagian belakangTutorial PythonMenguasai Pengoptimuman Memori Python: Teknik untuk Sains Data dan Pembelajaran Mesin

Mastering Python Memory Optimization: Techniques for Data Science and Machine Learning

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!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux?Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux?Apr 01, 2025 pm 05:09 PM

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

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?Mar 10, 2025 pm 06:54 PM

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

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?Mar 10, 2025 pm 06:52 PM

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

Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python?Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python?Mar 10, 2025 pm 06:48 PM

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.

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python?Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python?Apr 01, 2025 pm 11:15 PM

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 ...

Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka?Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka?Mar 21, 2025 pm 06:46 PM

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

Terangkan tujuan persekitaran maya di Python.Terangkan tujuan persekitaran maya di Python.Mar 19, 2025 pm 02:27 PM

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.

Apakah ungkapan biasa?Apakah ungkapan biasa?Mar 20, 2025 pm 06:25 PM

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

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MantisBT

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

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.