Numpy 扁平化数组但也保留值位置索引

Numpy 扁平化数组但也保留值位置索引

在本文中,我们将介绍如何使用Numpy扁平化数组并保留值的位置索引。

阅读更多:Numpy 教程

什么是Numpy?

Numpy是一个Python库,可用于科学计算,其中包括用于多维数组处理的功能。Numpy中的一个关键对象是ndarray,即n维数组。 ndarray类似于Python的内置列表,但具有更多的优势。它是一个可变大小的数组,它允许我们使用一些算术和逻辑运算来操作数据。

如何扁平化一个Numpy数组?

通过flattening数组,我们将其转换为一维数组。可以使用numpy.flatten()函数轻松地将数组扁平化。下面是一个示例代码:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
flattened_array = arr.flatten()
print(flattened_array)
Python

输出:

array([1, 2, 3, 4, 5, 6])
Python

如上所述,我们可以通过flatten函数将二维数组转换为一维数组。

保留数组值的位置索引

有时,我们需要扁平化数组,但仍需要知道每个值的位置索引。 在这种情况下,我们可以使用numpy.flatten()函数和numpy.argwhere()函数。 numpy.argwhere()函数是一个非常有用的函数,可以查找数组中给定条件的元素的索引。对于我们的需求,我们可以使用argwhere函数来检索原始数组中扁平化数组中的元素的索引。下面是一个示例代码:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
flattened_array = arr.flatten()
index_array = np.argwhere(arr)

print(flattened_array)
print(index_array)
Python

输出:

array([1, 2, 3, 4, 5, 6])
array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2]], dtype=int64)
Python

如上所述,我们使用flatten()函数将数组扁平化,然后使用argwhere()函数找到扁平化数组中每个元素的位置索引。

改进的方法

上面代码的一个缺点是argwhere函数既耗时又复杂。当数组变得更大时,这种方法的性能将大幅下降。 为了改善性能,我们可以使用NumPy的ravel_multi_index函数来执行相同的操作。 ravel_multi_index函数将多维索引转换为一维数组中的索引,从而降低了计算成本。 下面是一个示例代码:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
flattened_array = arr.flatten()
index_array = np.ravel_multi_index(np.argwhere(arr), arr.shape)

print(flattened_array)
print(index_array)
Python

输出:

array([1, 2, 3, 4, 5, 6])
array([0, 1, 2, 3, 4, 5], dtype=int64)
Python

如上所述,我们使用numpy.ravel_multi_index()函数获得了与使用numpy.argwhere()函数相同的结果,但更快且更简单。

总结

在本文中,我们介绍了如何使用Numpy扁平化数组并保留值的位置索引。我们了解了如何使用numpy.flatten()和numpy.ravel_multi_index()函数来实现这一目标。 numpy.ravel_multi_index()函数的使用可以提高性能,因此特别适用于更大的数组。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册