NumPy - 查找唯一行
在 NumPy 数组中查找唯一行
在 NumPy 中,数组可以包含多行数据,有时您可能希望识别唯一行,即它们在数组中只出现一次。查找唯一行涉及根据行内容确定哪些行与其他行不同。
在 NumPy 中,我们可以使用 unique() 函数实现此目的。
使用 union1d() 函数
np.unique() 函数通常用于查找数组中的唯一元素。当与 axis 参数一起使用时,它可以用于查找唯一行。语法如下:
numpy.unique(a, axis=None, return_index=False, return_inverse=False, return_counts=False)
其中:
- a - 为输入数组。
- axis - 为查找唯一值的轴。对于行,设置为 0。
- return_index − 决定是否返回第一次出现的索引。
- return_inverse − 决定是否返回可以重建数组的索引。
- return_counts − 决定是否返回唯一值的计数。
示例:在一维数组中查找唯一元素
np.unique() 函数最简单的用法是在一维数组中查找唯一元素 −
import numpy as np # 定义一个包含重复值的一维数组 array = np.array([1, 2, 2, 3, 4, 4, 5]) # 查找唯一元素 unique_elements = np.unique(array) print("唯一元素: ", unique_elements)
以下是得到的输出 −
唯一元素: [1 2 3 4 5]
示例:二维数组中的唯一行
在下面的示例中,我们使用 unique() 函数检索二维数组中的唯一行,并删除所有重复行 −
import numpy as np # 定义包含重复行的数组 array = np.array([ [1, 2, 3], [4, 5, 6], [1, 2, 3], [7, 8, 9] ]) # 查找唯一行 unique_rows = np.unique(array, axis=0) print("唯一行: ", unique_rows)
这将产生以下结果 -
唯一行: [[1 2 3] [4 5 6] [7 8 9]]
使用索引查找唯一行
我们可以在 NumPy 中通过将 unique() 函数中的 return_index 参数设置为 True 来查找原始数组中唯一行的索引。
示例
在此示例中,我们使用 unique() 函数查找唯一行及其索引 -
导入numpy as np # 定义一个包含重复行的数组 array = np.array([ [1, 2, 3], [4, 5, 6], [1, 2, 3], [7, 8, 9] ]) # 查找唯一行及其索引 unique_rows, indices = np.unique(array, axis=0, return_index=True) print("唯一行: ", unique_rows) print("唯一行的索引: ", indices)
以下是上述代码的输出 -
唯一行: [[1 2 3] [4 5 6] [7 8 9]] 唯一行的索引: [0 1 3]
重建原始数组
如果需要根据唯一行重建原始数组,可以使用 np.unique() 函数返回的索引,并将 return_inverse 参数设置为 True。逆索引可用于从唯一值映射回原始数据。
示例
在本例中,我们使用 unique() 函数识别 NumPy 数组中的唯一行及其原始索引。然后,我们使用这些索引重建数组,以验证唯一行是否与原始数组匹配且不包含重复项 -
import numpy as np # 定义包含重复行的数组 array = np.array([ [1, 2, 3], [4, 5, 6], [1, 2, 3], [7, 8, 9] ]) # 查找唯一行及其索引 unique_rows, indices = np.unique(array, axis=0, return_index=True) # 使用索引重建原始数组 reconstructed_array = array[np.sort(indices)] print("重建后的数组: ", reconstructed_array)
输出结果如下 -
重建后的数组: [[1 2 3] [4 5 6] [7 8 9]]
计算唯一行
除了查找唯一行之外,您可能还想计算每个唯一行在数组中出现的次数。在 NumPy 中,您可以通过在 unique() 函数中将 return_counts 参数设置为 True 来实现此目的。
这在处理多维数组(其中每一行代表一条记录或观察值)时尤其有用。
示例
在以下示例中,我们使用 unique() 函数检索原始数组中每个唯一行的计数 -
import numpy as np # 定义包含重复行的数组 array = np.array([ [1, 2, 3], [4, 5, 6], [1, 2, 3], [7, 8, 9] ]) # 查找唯一行及其计数 unique_rows, counts = np.unique(array, axis=0, return_counts=True) print("唯一行数: ", unique_rows) print("每行计数: ", counts)
执行上述代码后,我们得到以下输出 -
唯一行数: [[1 2 3] [4 5 6] [7 8 9]] 每行计数: [2 1 1]
多维数组
对于多维数组,您可以使用 np.unique() 函数通过将 axis 参数设置为 0 来查找唯一行。要处理所有维度上的唯一值,您可以使用默认设置。
示例
在下面的示例中,我们将三维数组展平为二维数组,然后使用 unique() 函数查找唯一行 -
import numpy as np # 定义三维数组 array = np.array([ [[1, 2], [3, 4]], [[1, 2], [5, 6]], [[1, 2], [3, 4]] ]) # 将三维数组展平为二维数组,以检查唯一性 array_2d = array.reshape(-1, array.shape[-1]) # 在展平后的数组中查找唯一行 unique_rows = np.unique(array_2d, axis=0) print("三维数组中的唯一行: ", unique_rows)
结果如下 −
三维数组中的唯一行: [[1 2] [3 4] [5 6]]