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技术站