Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Fungsi Vektor NumPy Boleh Mewajarkan Tatasusunan dengan Cekap?
NumPy menyediakan cara yang cekap untuk mewajarkan tatasusunan menggunakan fungsi tervektor, menawarkan prestasi yang lebih baik dan kesederhanaan kod berbanding gelung Python tradisional.
Diberi NumPy tatasusunan, tugasnya ialah mengalihkan elemen bukan sifarnya ke kiri, kanan, atas atau bawah sambil mengekalkan bentuknya.
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
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.
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)
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]]
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
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!