首页 >后端开发 >Python教程 >NumPy 向量化函数如何在多个方向上有效地证明 NumPy 数组的合理性?

NumPy 向量化函数如何在多个方向上有效地证明 NumPy 数组的合理性?

Linda Hamilton
Linda Hamilton原创
2024-12-20 14:49:17704浏览

How Can a NumPy Vectorized Function Efficiently Justify a NumPy Array in Multiple Directions?

用广义向量化函数证明 NumPy 数组

简介

证明 NumPy 数组是指将非零元素移至数组的一侧,使其更易于操作或 过程。虽然提供的 Python 函数侧重于 2D 矩阵的左对齐,但更高效、更全面的方法是使用 NumPy 向量化函数。

用于数组对齐的 NumPy 向量化函数

下面的函数 justify 提供了一种通用的方法来证明 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

参数:

  • a:要对齐的输入 NumPy 数组。
  • invalid_val:(可选)用于填充对齐数组的值无效。默认为 0。
  • axis:要执行对齐的轴。 1 表示行,0 表示列。
  • side:对齐方向。 ‘左’、‘右’、‘上’或‘下’。

用法示例:

  • 左理由:
a = np.array([[1, 0, 2, 0],
               [3, 0, 4, 0],
               [5, 0, 6, 0],
               [0, 7, 0, 8]])

justified_array = justify(a, side='left')

print(justified_array)
# Output:
# [[1, 2, 0, 0],
#  [3, 4, 0, 0],
#  [5, 6, 0, 0],
#  [7, 8, 0, 0]]
  • 向上理由:
justified_array = justify(a, axis=0, side='up')

print(justified_array)
# Output:
# [[1, 7, 2, 8],
#  [3, 0, 4, 0],
#  [5, 0, 6, 0],
#  [6, 0, 0, 0]]

NumPy 的优点函数:

  • 向量化:利用 NumPy 的向量化运算实现高性能。
  • 广义:支持所有四个方向的对齐.
  • 兼容任意数组形状: 对齐任意维度的数组。
  • 可自定义无效值: 允许指定无效位置的填充值。
  • 合并空值处理: 自动屏蔽 NaN 值(如果 invalid_val 设置为NaN)。

结论

提供的 NumPy 函数 justify 提供了一种稳健且有效的方法来证明 NumPy 数组的合理性。其通用性和矢量化实现使其成为数组操作和处理任务的多功能工具。

以上是NumPy 向量化函数如何在多个方向上有效地证明 NumPy 数组的合理性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn