Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich die Nicht-Null-Elemente eines NumPy-Arrays effizient begründen?

Wie kann ich die Nicht-Null-Elemente eines NumPy-Arrays effizient begründen?

DDD
Freigeben: 2024-12-08 05:23:11
Original
891 Leute haben es durchsucht

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

Das Ausrichten von Nicht-Null-Elementen auf eine bestimmte Seite (oft nützlich bei Suchvorgängen) ist eine häufige Operation, die direkt für ein NumPy-Array durchgeführt werden kann. So geht's -

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
Nach dem Login kopieren

Der obige Ausschnitt kann ein 2D-Array entlang einer ausgewählten Achse in jeder der vier möglichen Richtungen ausrichten -

# 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'))
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die Nicht-Null-Elemente eines NumPy-Arrays effizient begründen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage