Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Fungsi Vektor NumPy Boleh Mewajarkan Tatasusunan dengan Cekap?

Bagaimanakah Fungsi Vektor NumPy Boleh Mewajarkan Tatasusunan dengan Cekap?

DDD
Lepaskan: 2024-12-09 11:05:06
asal
295 orang telah melayarinya

How Can NumPy's Vectorized Functions Efficiently Justify Arrays?

Mewajarkan Tatasusunan NumPy dengan Fungsi Bervektor

NumPy menyediakan cara yang cekap untuk mewajarkan tatasusunan menggunakan fungsi tervektor, menawarkan prestasi yang lebih baik dan kesederhanaan kod berbanding gelung Python tradisional.

Pernyataan Masalah

Diberi NumPy tatasusunan, tugasnya ialah mengalihkan elemen bukan sifarnya ke kiri, kanan, atas atau bawah sambil mengekalkan bentuknya.

Penyelesaian Numpy

Pelaksanaan NumPy berikut melaksanakan justifikasi yang cekap:

import numpy as np

def justify(a, invalid_val=0, axis=1, side='left'):    
    if invalid_val is np.nan:
        mask = ~np.isnan(a)
    else:
        mask = a!=invalid_val
    justified_mask = np.sort(mask,axis=axis)
    if (side=='up') | (side=='left'):
        justified_mask = np.flip(justified_mask,axis=axis)
    out = np.full(a.shape, invalid_val) 
    if axis==1:
        out[justified_mask] = a[mask]
    else:
        out.T[justified_mask.T] = a.T[mask.T]
    return out
Salin selepas log masuk

Fungsi ini membenarkan tatasusunan 2D di sepanjang paksi dan sisi yang ditentukan (kiri, kanan, atas, bawah). Ia berfungsi dengan mengenal pasti elemen bukan sifar menggunakan topeng, mengisihnya menggunakan isihan, membalikkan topeng jika mewajarkan ke atas atau ke kiri, dan akhirnya menimpa tatasusunan asal dengan nilai yang dibenarkan.

Contoh Penggunaan

Berikut ialah contoh penggunaan yang merangkumi elemen bukan sifar kepada kiri:

a = np.array([[1,0,2,0], 
              [3,0,4,0], 
              [5,0,6,0], 
              [0,7,0,8]])

# Cover left
covered_left = justify(a, axis=1, side='left')

print("Original Array:")
print(a)
print("\nCovered Left:")
print(covered_left)
Salin selepas log masuk

Output:

Original Array:
[[1 0 2 0]
 [3 0 4 0]
 [5 0 6 0]
 [0 7 0 8]]

Covered Left:
[[1 2 0 0]
 [3 4 0 0]
 [5 6 0 0]
 [7 8 0 0]]
Salin selepas log masuk

Mewajarkan Tatasusunan N-Dimensi Generik

Untuk mewajarkan tatasusunan N-dimensi, fungsi berikut boleh digunakan :

def justify_nd(a, invalid_val, axis, side):    
    pushax = lambda a: np.moveaxis(a, axis, -1)
    if invalid_val is np.nan:
        mask = ~np.isnan(a)
    else:
        mask = a!=invalid_val
    justified_mask = np.sort(mask,axis=axis)
    
    if side=='front':
        justified_mask = np.flip(justified_mask,axis=axis)
            
    out = np.full(a.shape, invalid_val)
    if (axis==-1) or (axis==a.ndim-1):
        out[justified_mask] = a[mask]
    else:
        pushax(out)[pushax(justified_mask)] = pushax(a)[pushax(mask)]
    return out
Salin selepas log masuk

Fungsi ini menyokong senario yang lebih kompleks dengan mewajarkan tatasusunan N-dimensi sepanjang paksi arbitrari dan sama ada ke 'depan' atau 'hujung' tatasusunan.

Atas ialah kandungan terperinci Bagaimanakah Fungsi Vektor NumPy Boleh Mewajarkan Tatasusunan dengan Cekap?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan