Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa NumPy Gagal Memperuntukkan Tatasusunan Besar pada Ubuntu, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa NumPy Gagal Memperuntukkan Tatasusunan Besar pada Ubuntu, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Lepaskan: 2024-11-30 14:40:11
asal
133 orang telah melayarinya

Why Does NumPy Fail to Allocate Large Arrays on Ubuntu, and How Can I Fix It?

Tidak Dapat Memperuntukkan Tatasusunan dengan Bentuk dan Jenis Data

Simptom

Apabila memperuntukkan tatasusunan besar dalam NumPy pada Ubuntu 18, pengguna mungkin menghadapi ralat "MemoryError: Tidak dapat memperuntukkan tatasusunan dengan bentuk". Ini berlaku walaupun memori sistem mencukupi. Terutamanya, tiada isu sedemikian timbul pada macOS.

Punca

Isu ini berpunca daripada mod pengendalian terlalu komited sistem. Dalam mod lalai (0), kernel mungkin menolak permintaan peruntukan yang dianggap terlalu berlebihan untuk memori fizikal.

Resolusi

Untuk menyelesaikan ralat:

  1. Semak mod overcommit:

    $ cat /proc/sys/vm/overcommit_memory
    Salin selepas log masuk

    Jika ia kembali 0, teruskan ke langkah 2.

  2. Dayakan mod "sentiasa melebihi komitmen" sebagai akar:

    $ echo 1 > /proc/sys/vm/overcommit_memory
    Salin selepas log masuk
  3. Cuba semula peruntukan tatasusunan.

Contoh

Untuk pelbagai dimensi (156816, 36, 53806), dengan jenis data uint8:

import numpy as np

# Allocate array with "always overcommit" mode enabled
a = np.zeros((156816, 36, 53806), dtype='uint8')
print(a.nbytes)  # 303755101056 bytes
Salin selepas log masuk

Sistem akan memperuntukkan memori hanya apabila elemen tatasusunan tertentu ditulis. Ini membolehkan penggunaan tatasusunan jarang.

Atas ialah kandungan terperinci Mengapa NumPy Gagal Memperuntukkan Tatasusunan Besar pada Ubuntu, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan