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

yizhihongxing

详解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

相关文章

  • 利用numpy实现一、二维数组的拼接简单代码示例

    利用NumPy实现一、二维数组的拼接简单代码示例 在NumPy中,我们可以使用concatenate函数来拼接一维或二维数组。在本文中,我们将介绍如何使用NumPy来拼接一维和二维数组,并提供两个示例来演示其用法。 一维数组的拼接 在NumPy中,我们可以使用concatenate函数来拼接一维数组。下面是一个使用NumPy拼接一维数组的示例: import…

    python 2023年5月14日
    00
  • Pyqt QImage 与 np array 转换方法

    下面是关于“PyqtQImage与nparray转换方法”的完整攻略,包含了两个示例。 PyqtQImage与nparray转换方法 在Qt中,可以使用QImage类处理图像。在Python中,可以使用numpy库来处理数组。下面是两种方法,演示如何将PyQt中的QImage对象转换为numpy中的,以及如何将numpy中的数组转换为PyQt中的QImage…

    python 2023年5月14日
    00
  • 浅谈numpy中np.array()与np.asarray的区别以及.tolist

    以下是关于“浅谈numpy中np.array()与np.asarray的区别以及.tolist”的完整攻略。 np.array()和np.asarray()的区别 在NumPy中,np.array()和np.asarray()可以用于将Python列表或元组转换为NumPy数组。它们的要区别在于,当输入参数为NumPy数组时,np.array会创建一个新的数…

    python 2023年5月14日
    00
  • pandas DataFrame索引行列的实现

    下面是关于“Pandas DataFrame索引行列的实现”的攻略。 Pandas DataFrame的索引 Pandas DataFrame是一种二维表格数据结构,由于其数据处理和分析的便捷性,近年来受到越来越多数据科学家和分析师的青睐。在使用 Pandas DataFrame 时,最常用的方式就是使用索引来定位并处理表格中的数据。 行索引 Pandas …

    python 2023年5月14日
    00
  • Pandas 重塑(stack)和轴向旋转(pivot)的实现

    以下是关于“Pandas重塑(stack)和轴向旋转(pivot)的实现”的完整攻略。 背景 在数据分析和处理中,经常需要对数据进行重塑和轴向旋转。Pandas库提供了stack()和pivot()函数,可以方便地实现数据重和轴向旋转。本攻略将介绍如何使用Pandas库实现数据重塑和轴向旋转。 步骤 步一:导入必要的库 在开始之前,需要导入必要的库。以下是示…

    python 2023年5月14日
    00
  • Numpy对于NaN值的判断方法

    以下是Numpy对于NaN值的判断方法的攻略: Numpy对于NaN值的判断方法 在Numpy中,可以使用isnan()函数来判断数组中是否存在NaN值。以下是一些实现方法: 判断一维数组是否存在NaN值 可以使用isnan()函数来判断一维数组中是否存在NaN值。以下是一个示例: import numpy as np a = np.array([1, 2,…

    python 2023年5月14日
    00
  • python中numpy.empty()函数实例讲解

    以下是关于“Python中numpy.empty()函数实例讲解”的完整攻略。 numpy.empty()函数简介 在NumPy中,empty()函数用于创建一个指定形状和数据类型的未初始化的数组。这个函数返回的数组的元素值是随机的,因为它们未被初始化。 numpy.empty()函数方法 下面是empty()函数的使用方法: numpy.empty(sha…

    python 2023年5月14日
    00
  • python的pygal模块绘制反正切函数图像方法

    以下是关于“Python的Pygal模块绘制反正切函数图像方法”的完整攻略。 背景 Pygal是一个Python的数据可视化库,可以用于绘制各种类型的图表,包括线图、状图、饼图等。本攻略将介绍如何使用Pygal绘制反正切函数图像。 步骤 步骤一:安装Pygal 在使用Pygal之前,需要先安装Pygal库。可以使用pip命令进行安装,以下是示例: pip i…

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