Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mewajarkan Elemen Bukan Sifar Array NumPy dengan Cekap?

Bagaimanakah Saya Boleh Mewajarkan Elemen Bukan Sifar Array NumPy dengan Cekap?

DDD
DDDasal
2024-12-08 05:23:11917semak imbas

How Can I Efficiently Justify a NumPy Array's Non-Zero Elements?

Menjustifikasikan elemen bukan sifar kepada bahagian tertentu (selalunya berguna dalam carian) ialah operasi biasa, yang boleh dilakukan secara terus untuk tatasusunan NumPy. Begini caranya -

import numpy as np

def justify(a, invalid_val=0, axis=1, side='left'):    
    """
    Justifies a 2D array

    Parameters
    ----------
    A : ndarray
        Input array to be justified
    axis : int
        Axis along which justification is to be made
    side : str
        Direction of justification. It could be 'left', 'right', 'up', 'down'
        It should be 'left' or 'right' for axis=1 and 'up' or 'down' for axis=0.

    """

    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

Coretan di atas boleh mewajarkan tatasusunan 2D di sepanjang paksi yang dipilih dalam mana-mana empat arah yang mungkin -

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

# shift to left
print(justify(a, axis=0, side='up'))
# shift to down
print(justify(a, axis=0, side='down'))
# shift to left
print(justify(a, axis=1, side='left'))
# shift to right
print(justify(a, axis=1, side='right'))

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mewajarkan Elemen Bukan Sifar Array NumPy dengan Cekap?. 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