Numpy обеспечивает эффективные способы оправдания массивов с использованием векторизованных функций, предлагая улучшенную производительность и простые коды по сравнению с традиционными петлями Python. Ненулевые элементы слева, вправо, вверх или вниз при поддержании своей формы.
. Следующая реализация 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] вернуть
пример использования
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:
оправдывает общий 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