详解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常用的数组的扩展和压缩方法的所有内容。

本文链接:https://my.lmcjl.com/post/19731.html

展开阅读全文

4 评论

留下您的评论.