如何将 Numpy 数组转换为列表
在数据处理和科学计算中,Numpy 是 Python 中最流行的库之一。Numpy 提供了一个强大的对象 ndarray(N-dimensional array),用于有效地处理大型数组和矩阵。然而,在某些情况下,我们可能需要将 Numpy 数组转换为 Python 的标准列表格式。这可能是因为某些 Python 库或函数只接受列表作为输入,或者我们可能需要将数据输出到可读性更强的格式。
本文将详细介绍如何将 Numpy 数组转换为列表,包括不同形状和数据类型的数组。我们将通过多个示例代码来展示不同的转换方法和技巧。
1. 使用 tolist()
方法
Numpy 数组对象有一个非常方便的方法 tolist()
,该方法可以将数组转换为嵌套列表。这是最直接的方法。
示例代码 1: 将一维数组转换为列表
Output:
示例代码 2: 将二维数组转换为列表
Output:
示例代码 3: 将三维数组转换为列表
Output:
2. 使用列表推导式
虽然 tolist()
方法非常方便,但在某些复杂的转换场景中,我们可能需要更多的控制,比如转换过程中的数据类型转换或条件过滤。这时,列表推导式就显得非常有用。
示例代码 4: 使用列表推导式转换一维数组
Output:
示例代码 5: 使用列表推导式转换二维数组并进行条件过滤
Output:
3. 使用 np.ndarray.flatten()
方法
当我们需要将多维数组转换为一维列表时,flatten()
方法是一个非常有用的工具。它可以将任何形状的数组“压平”成一维数组,然后我们可以轻松地将其转换为列表。
示例代码 6: 将二维数组压平并转换为列表
Output:
示例代码 7: 将三维数组压平并转换为列表
Output:
4. 使用 np.concatenate()
方法
当我们有多个数组需要首先合并再转换为列表时,np.concatenate()
方法可以帮助我们。这个方法可以将一个数组列表合并成一个单一的数组。
示例代码 8: 合并多个一维数组并转换为列表
Output:
示例代码 9: 合并多个二维数组并转换为列表
Output:
5. 使用 np.hstack()
和 np.vstack()
方法
np.hstack()
和 np.vstack()
方法提供了另一种合并数组的方式。np.hstack()
水平堆叠数组,而 np.vstack()
垂直堆叠数组。这些方法特别适用于需要保持数组维度的场景。
示例代码 10: 使用 np.hstack() 水平堆叠数组并转换为列表
Output:
示例代码 11: 使用 np.vstack() 垂直堆叠数组并转换为列表
Output:
6. 使用 np.array_str()
和 np.array_repr()
方法
当我们需要将 numpy 数组转换为字符串表示的列表时,np.array_str()
和 np.array_repr()
方法非常有用。这些方法返回数组的字符串表示,我们可以使用 Python 的 eval()
函数将其转换为列表。
示例代码 12: 使用 np.array_str() 转换为字符串表示的列表
示例代码 13: 使用 np.array_repr() 转换为字符串表示的列表
7. 使用 np.char.join()
方法
当我们需要将字符串类型的 numpy 数组转换为列表时,np.char.join()
方法可以帮助我们。这个方法可以将每个元素连接成一个字符串,然后我们可以使用 Python 的 split()
方法将其转换为列表。
示例代码 14: 使用 np.char.join() 转换为字符串列表
8. 使用 np.apply_along_axis()
方法
当我们需要对数组的每个元素应用一个函数并将结果转换为列表时,np.apply_along_axis()
方法非常有用。这个方法可以沿着指定的轴应用一个函数。
示例代码 15: 使用 np.apply_along_axis() 应用函数并转换为列表
Output:
9. 使用 np.vectorize()
方法
np.vectorize()
方法提供了一种将函数向量化的方式,使得函数可以直接应用于数组的每个元素。然后我们可以将结果转换为列表。
示例代码 16: 使用 np.vectorize() 向量化函数并转换为列表
Output:
10. 使用 np.ndenumerate()
方法
当我们需要在转换为列表的同时保留数组元素的索引时,np.ndenumerate()
方法非常有用。这个方法返回一个迭代器,产生数组的索引和对应的值。
示例代码 17: 使用 np.ndenumerate() 保留索引并转换为列表
Output:
总结,Numpy 提供了多种方法将数组转换为列表,包括 tolist()
方法、列表推导式、flatten()
方法、concatenate()
方法、hstack()
和 vstack()
方法、array_str()
和 array_repr()
方法、char.join()
方法、apply_along_axis()
方法、vectorize()
方法以及 ndenumerate()
方法。这些方法可以满足我们在不同场景下的转换需求。