«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как векторизованные функции Numpy могут эффективно оправдать массивы?

Как векторизованные функции Numpy могут эффективно оправдать массивы?

Опубликовано в 2025-03-25
Просматривать:260

How Can NumPy's Vectorized Functions Efficiently Justify Arrays?

оправдывание Numpy массивов с векторизованными функциями

Numpy обеспечивает эффективные способы оправдания массивов с использованием векторизованных функций, предлагая улучшенную производительность и простые коды по сравнению с традиционными петлями Python. Ненулевые элементы слева, вправо, вверх или вниз при поддержании своей формы.

Numpy Solution

. Следующая реализация Nump DEF LOSEIFY (a, Invalid_val = 0, axis = 1, side = 'left'): Если invalid_val is np.nan: Маска = ~ np.isnan (a) еще: Маска = a! = Invalid_val Оправданный if (side == 'up') | (сторона == 'слева'): Оправданный out = np.full (a.shape, Invalid_val) Если ось == 1: out [reasufify_mask] = a [маска] еще: out.t [reasufifify_mask.t] = a.t [mask.t] вернуть

Эта функция оправдывает 2D массив вдоль указанной оси и стороны (слева, справа, вверх, вниз). Он работает, идентифицируя ненулевые элементы, используя маску, сортируя их, используя сортировку, переворачивая маску, если оправдывая вверх или влево, и, наконец, перезаписывая исходный массив с оправданными значениями.

пример использования

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

output:

riginal Array: [[1 0 2 0] [3 0 4 0] [5 0 6 0] [0 7 0 8]] Покрыты слева: [[1 2 0 0] [3 4 0 0] [5 6 0 0] [7 8 0 0]]

оправдывает общий n-измерный массив

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)

def just_nd (a, valid_val, axis, side):: pushax = rambda a: np.moveaxis (a, axis, -1) Если invalid_val is np.nan: Маска = ~ np.isnan (a) еще: Маска = a! = Invalid_val Оправданный Если сторона == 'Front': Оправданный out = np.full (a.shape, Invalid_val) if (axis ==-1) или (axis == a.ndim-1): out [reasufify_mask] = a [маска] еще: pushax (out) [pushax (useifififie_mask)] = pushax (a) [pushax (mask)]] Верните

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]]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3