详解NumPy常用的数组的扩展和压缩方法

详解NumPy常用的数组的扩展和压缩方法

NumPy数组的扩展和压缩是指在不改变数组元素的情况下,改变数组的形状或尺寸。

数组的扩展

数组的扩展是指将一个数组扩展成一个更大或更小的形状。NumPy提供了几种方式来扩展数组,包括:

  • numpy.reshape()
  • numpy.resize()
  • numpy.append()

numpy.reshape()

reshape()函数用于改变数组的形状,返回一个新的数组对象。它的基本用法如下:

numpy.reshape(arr, newshape, order='C')

其中,arr是需要改变形状的数组;newshape是新的形状,可以是一个整数元组;order是可选参数,指定数组的遍历顺序,默认为'C',即按行遍历。例如:

import numpy as np

arr = np.arange(8)
print(arr)  # [0 1 2 3 4 5 6 7]

new_arr = np.reshape(arr, (2, 4))
print(new_arr)
# [[0 1 2 3]
#  [4 5 6 7]]

numpy.resize()

resize()函数用于改变数组的尺寸,返回一个新的数组对象。它的基本用法如下:

numpy.resize(arr, new_shape)
其中,arr是需要改变尺寸的数组;new_shape是新的尺寸,可以是一个整数元组。如果新的尺寸比原来的尺寸大,新的数组会重复原数组中的元素,如果新的尺寸比原来的尺寸小,原数组中的元素会被丢弃。例如:

import numpy as np

arr = np.array([[1, 2], [3, 4]])
print(arr)
# [[1 2]
#  [3 4]]

new_arr = np.resize(arr, (3, 3))
print(new_arr)
# [[1 2 3]
#  [4 1 2]
#  [3 4 1]]

numpy.append()

append()函数用于将一个数组或值附加到另一个数组的末尾,返回一个新的数组对象。它的基本用法如下:

numpy.append(arr, values, axis=None)

其中,arr是需要附加到其末尾的数组;values是要附加的数组或值;axis是可选参数,指定在哪个轴上进行附加操作。如果不指定轴,则会将数组展开并附加到末尾。例如:


import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
new_arr = np.append(arr1, arr2)
print(new_arr)  # [1 2 3 4 5 6]

数组的压缩

numpy.compress()

数组的压缩是指将一个数组压缩成一个更小的形状。NumPy提供了几种方式来压缩数组,

在 NumPy 中,可以使用 numpy.compress() 函数对数组进行压缩,该函数可以根据指定的条件对数组进行筛选,返回符合条件的元素组成的新数组。

numpy.compress(condition, a, axis=None, out=None) 函数的参数如下:

  • condition:布尔型数组或者布尔型数组表达式,用于筛选元素。
  • a:需要进行压缩的数组。
  • axis:指定压缩的轴,默认为 None,即将数组展开成一维数组,对整个数组进行压缩。
  • out:指定输出的数组,如果不指定,则函数会创建一个新的数组来存储压缩后的结果。

以下是使用 numpy.compress() 函数进行压缩的示例:

import numpy as np

a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
condition = np.array([True, False, True])
b = np.compress(condition, a, axis=0)

print("原数组:")
print(a)
print("压缩后的数组:")
print(b)

输出结果如下:

原数组:
[[0 1 2]
 [3 4 5]
 [6 7 8]]
压缩后的数组:
[[0 1 2]
 [6 7 8]]

在示例中,原数组 a 是一个 $3\times3$ 的二维数组,condition 是一个布尔型数组,用于指定压缩的条件。通过指定 axis=0 参数,对数组 a 沿着第一个轴进行压缩,返回符合条件的行组成的新数组。

另外,numpy.compress() 函数也可以用来删除数组中的元素。只需要将不符合条件的元素置为 False,并将该布尔型数组传递给 numpy.compress() 函数即可。例如,将数组中所有小于 5 的元素删除:

import numpy as np

a = np.array([1, 3, 5, 2, 4, 6])
condition = a >= 5
b = np.compress(condition, a)

print("原数组:")
print(a)
print("删除后的数组:")
print(b)

输出结果如下:

原数组:
[1 3 5 2 4 6]
删除后的数组:
[5 6]

在示例中,通过 a >= 5 得到一个布尔型数组 condition,其中所有大于等于 5 的元素对应的位置上的值为 True,小于 5 的元素对应的位置上的值为 False,将 condition 传递给 numpy.compress() 函数即可。

其他数组压缩方法

除了 numpy.compress() 之外,还有以下几种压缩数组的方法:

使用布尔掩码压缩数组
可以使用布尔数组作为掩码来筛选数组中的元素。将布尔数组作为索引传递给原始数组,将返回掩码为 True 的元素。

import numpy as np

# 创建一个 1 维数组
arr = np.array([1, 2, 3, 4, 5])

# 创建一个布尔掩码
mask = np.array([True, False, True, False, False])

# 使用掩码压缩数组
result = arr[mask]

print(result)  # [1 3]

使用 NumPy 的 where() 方法

可以使用 NumPy 的 where() 方法来筛选数组中满足指定条件的元素。


import numpy as np

# 创建一个 1 维数组
arr = np.array([1, 2, 3, 4, 5])

# 使用 where() 方法筛选元素
result = np.where(arr > 2)

print(result)  # (array([2, 3, 4]),)

其中,where() 方法返回一个元组,包含满足条件的元素的索引。

使用 NumPy 的 nonzero() 方法

可以使用 NumPy 的 nonzero() 方法来查找数组中非零元素的索引。


import numpy as np

# 创建一个 1 维数组
arr = np.array([1, 0, 2, 0, 3, 0, 4, 0, 5])

# 使用 nonzero() 方法查找非零元素的索引
result = np.nonzero(arr)

print(result)  # (array([0, 2, 4, 6, 8]),)

其中,nonzero() 方法返回一个元组,包含非零元素的索引。

使用 NumPy 的 trim_zeros() 方法

可以使用 NumPy 的 trim_zeros() 方法来删除数组开头和结尾的零值。


import numpy as np

# 创建一个 1 维数组
arr = np.array([0, 0, 1, 2, 0, 0, 0, 3, 4, 0, 5, 0, 0])

# 使用 trim_zeros() 方法删除数组开头和结尾的零值
result = np.trim_zeros(arr)

print(result)  # [1 2 0 0 0 3 4 0 5]

其中,trim_zeros() 方法返回一个新的数组,其中开头和结尾的零值已被删除。

以上就是NumPy常用的数组的扩展和压缩方法的所有内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解NumPy常用的数组的扩展和压缩方法 - Python技术站

(3)
上一篇 2023年3月1日 下午8:10
下一篇 2023年3月1日 下午8:40

相关文章

  • Anaconda入门使用总结

    Anaconda入门使用总结 Anaconda是一个用于数据科学和机器学习的开源发行版,它包含了Python、R语言、Jupyter Notebook等常用工具和库。本文将介绍如何安装和使用Anaconda,以及如何创建和管理虚拟环境。 安装Anaconda 首先,我们需要从Anaconda官网下载适合自己操作系统的安装包。下载完成后,双击安装包并按照提示进…

    python 2023年5月14日
    00
  • python对站点数据做EOF且做插值绘制填色图

    Python中可以使用EOF(Empirical Orthogonal Function)对站点数据进行降维处理,然后使用插值方法绘制填色图。以下是一个完整的攻略,包含两个示例说明。 安装依赖库 在使用EOF和插值方法之前,需要先安装一些依赖库。可以使用pip安装numpy、scipy、matplotlib和basemap库。以下是一个安装依赖库的示例: p…

    python 2023年5月14日
    00
  • Python实现的径向基(RBF)神经网络示例

    Python实现的径向基(RBF)神经网络示例 径向基(RBF)神经网络是一种常用的神经网络模型,它的主要特点具有良好的非线性逼近能力和快速的训练速度。在Python中,可以使用numpy和scikit-learn库来实现RBF神经网络。本攻略将介绍如何使用Python实现径向基(RBF)神经网络,并提供两个示例,分别是使用RBF神经网络进行分类和回归。 生…

    python 2023年5月14日
    00
  • Pytorch 实现sobel算子的卷积操作详解

    以下是关于“Pytorch实现sobel算子的卷积操作详解”的完整攻略。 背景 Sobel算子是一种常用的边缘检测算法,可以用于像处理、计算机视觉等领域。在torch中,可以使用卷积操作实现Sobel算子。 步骤 步骤一:导入Pytorch和图像 在使用Pytorch实现Sobel算子之前,需要导入Pytorch和图像。以下是示例代码: import tor…

    python 2023年5月14日
    00
  • python numpy.power()数组元素求n次方案例

    以下是关于“Python Numpy.power()数组元素求n次方”的完整攻略。 Numpy.power()函数的使用 Numpy.power()函数用于对数组中的元素进行n次方运算。它的法如下: numpy.power(x, n) 其中x表示要进行n次方运算的数组,n表示要进行的次方数。 面是一个使用Numpy.power()函数对数组进行n次方运算的示…

    python 2023年5月14日
    00
  • 对numpy中array和asarray的区别详解

    以下是关于“对numpy中array和asarray的区别详解”的完整攻略。 背景 在使用NumPy时,经常会使用array和asarray函数来创建数组。这两个函数看起来很相似,但实际上有一些区别。本攻略将详细介绍array和asarray函数的区别。 array函数 array函数是NumPy中最基本的数组创建函数之一。它可以将Python列表、元组等序…

    python 2023年5月14日
    00
  • NumPy 数组属性的具体使用

    在NumPy中,数组属性是指数组对象的一些特定属性,例如数组的形状、数据类型、维度等。本文将详细讲解NumPy数组属性的具体使用,包括数组的形状、数据类型、维度等。 数组的形状 在NumPy中,可以使用shape属性来获取数组的形状。下面是一个示例: import numpy as np #一个二维数组 a = np.array([[1, 2, 3], [4…

    python 2023年5月13日
    00
  • numpy最值、求和的实现

    以下是关于“numpy最值、求和的实现”的完整攻略。 numpy中的最值函数 在NumPy中,我们可以使用max()和min()函数来计算数组的最大值和最小值。下面是一个使用max()和min()函数的示例代码: import numpy as np # 创建一个一维数组 a = np.array([1, 2, 3, 4, 5]) # 计算数组的最大值和最小…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部