如何将 Numpy 数组转换为列表

如何将 Numpy 数组转换为列表

参考:numpy array to list

在数据处理和科学计算中,NumpyPython 中最流行的库之一。Numpy 提供了一个强大的对象 ndarray(N-dimensional array),用于有效地处理大型数组和矩阵。然而,在某些情况下,我们可能需要将 Numpy 数组转换为 Python 的标准列表格式。这可能是因为某些 Python 库或函数只接受列表作为输入,或者我们可能需要将数据输出到可读性更强的格式。

本文将详细介绍如何将 Numpy 数组转换为列表,包括不同形状和数据类型的数组。我们将通过多个示例代码来展示不同的转换方法和技巧。

1. 使用 tolist() 方法

Numpy 数组对象有一个非常方便的方法 tolist(),该方法可以将数组转换为嵌套列表。这是最直接的方法。

示例代码 1: 将一维数组转换为列表

import numpy as np

# 创建一个一维 numpy 数组
array_1d = np.array([1, 2, 3, 4, 5])

# 使用 tolist() 方法转换为列表
list_1d = array_1d.tolist()

print(list_1d)  # 输出: [1, 2, 3, 4, 5]

Output:

如何将 Numpy 数组转换为列表

示例代码 2: 将二维数组转换为列表

import numpy as np

# 创建一个二维 numpy 数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 tolist() 方法转换为列表
list_2d = array_2d.tolist()

print(list_2d)  # 输出: [[1, 2, 3], [4, 5, 6]]

Output:

如何将 Numpy 数组转换为列表

示例代码 3: 将三维数组转换为列表

import numpy as np

# 创建一个三维 numpy 数组
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# 使用 tolist() 方法转换为列表
list_3d = array_3d.tolist()

print(list_3d)  # 输出: [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

Output:

如何将 Numpy 数组转换为列表

2. 使用列表推导式

虽然 tolist() 方法非常方便,但在某些复杂的转换场景中,我们可能需要更多的控制,比如转换过程中的数据类型转换或条件过滤。这时,列表推导式就显得非常有用。

示例代码 4: 使用列表推导式转换一维数组

import numpy as np

# 创建一个一维 numpy 数组
array_1d = np.array([1, 2, 3, 4, 5])

# 使用列表推导式转换为列表
list_1d = [x for x in array_1d]

print(list_1d)  # 输出: [1, 2, 3, 4, 5]

Output:

如何将 Numpy 数组转换为列表

示例代码 5: 使用列表推导式转换二维数组并进行条件过滤

import numpy as np

# 创建一个二维 numpy 数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# 使用列表推导式转换为列表,只包含大于 3 的元素
list_2d = [[x for x in row if x > 3] for row in array_2d]

print(list_2d)  # 输出: [[], [4, 5, 6]]

Output:

如何将 Numpy 数组转换为列表

3. 使用 np.ndarray.flatten() 方法

当我们需要将多维数组转换为一维列表时,flatten() 方法是一个非常有用的工具。它可以将任何形状的数组“压平”成一维数组,然后我们可以轻松地将其转换为列表。

示例代码 6: 将二维数组压平并转换为列表

import numpy as np

# 创建一个二维 numpy 数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 flatten() 方法压平数组,然后转换为列表
list_flat = array_2d.flatten().tolist()

print(list_flat)  # 输出: [1, 2, 3, 4, 5, 6]

Output:

如何将 Numpy 数组转换为列表

示例代码 7: 将三维数组压平并转换为列表

import numpy as np

# 创建一个三维 numpy 数组
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# 使用 flatten() 方法压平数组,然后转换为列表
list_flat = array_3d.flatten().tolist()

print(list_flat)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8]

Output:

如何将 Numpy 数组转换为列表

4. 使用 np.concatenate() 方法

当我们有多个数组需要首先合并再转换为列表时,np.concatenate() 方法可以帮助我们。这个方法可以将一个数组列表合并成一个单一的数组。

示例代码 8: 合并多个一维数组并转换为列表

import numpy as np

# 创建几个一维 numpy 数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
array3 = np.array([7, 8, 9])

# 使用 np.concatenate() 方法合并数组
combined_array = np.concatenate((array1, array2, array3))

# 转换为列表
combined_list = combined_array.tolist()

print(combined_list)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Output:

如何将 Numpy 数组转换为列表

示例代码 9: 合并多个二维数组并转换为列表

import numpy as np

# 创建几个二维 numpy 数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

# 使用 np.concatenate() 方法合并数组,指定 axis=0 以沿着第一个轴合并
combined_array = np.concatenate((array1, array2), axis=0)

# 转换为列表
combined_list = combined_array.tolist()

print(combined_list)  # 输出: [[1, 2], [3, 4], [5, 6], [7, 8]]

Output:

如何将 Numpy 数组转换为列表

5. 使用 np.hstack()np.vstack() 方法

np.hstack()np.vstack() 方法提供了另一种合并数组的方式。np.hstack() 水平堆叠数组,而 np.vstack() 垂直堆叠数组。这些方法特别适用于需要保持数组维度的场景。

示例代码 10: 使用 np.hstack() 水平堆叠数组并转换为列表

import numpy as np

# 创建几个一维 numpy 数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 使用 np.hstack() 方法水平堆叠数组
stacked_array = np.hstack((array1, array2))

# 转换为列表
stacked_list = stacked_array.tolist()

print(stacked_list)  # 输出: [1, 2, 3, 4, 5, 6]

Output:

如何将 Numpy 数组转换为列表

示例代码 11: 使用 np.vstack() 垂直堆叠数组并转换为列表

import numpy as np

# 创建几个一维 numpy 数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# 使用 np.vstack() 方法垂直堆叠数组
stacked_array = np.vstack((array1, array2))

# 转换为列表
stacked_list = stacked_array.tolist()

print(stacked_list)  # 输出: [[1, 2, 3], [4, 5, 6]]

Output:

如何将 Numpy 数组转换为列表

6. 使用 np.array_str()np.array_repr() 方法

当我们需要将 numpy 数组转换为字符串表示的列表时,np.array_str()np.array_repr() 方法非常有用。这些方法返回数组的字符串表示,我们可以使用 Python 的 eval() 函数将其转换为列表。

示例代码 12: 使用 np.array_str() 转换为字符串表示的列表

import numpy as np

# 创建一个一维 numpy 数组
array_1d = np.array([1, 2, 3, 4, 5])

# 使用 np.array_str() 方法获取数组的字符串表示
array_str = np.array_str(array_1d)

# 使用 eval() 函数将字符串转换为列表
list_1d = eval(array_str)

print(list_1d)  # 输出: [1, 2, 3, 4, 5]

示例代码 13: 使用 np.array_repr() 转换为字符串表示的列表

import numpy as np

# 创建一个二维 numpy 数组
array_2d = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 np.array_repr() 方法获取数组的字符串表示
array_repr = np.array_repr(array_2d)

# 使用 eval() 函数将字符串转换为列表
list_2d = eval(array_repr)

print(list_2d)  # 输出: [[1, 2, 3], [4, 5, 6]]

7. 使用 np.char.join() 方法

当我们需要将字符串类型的 numpy 数组转换为列表时,np.char.join() 方法可以帮助我们。这个方法可以将每个元素连接成一个字符串,然后我们可以使用 Python 的 split() 方法将其转换为列表。

示例代码 14: 使用 np.char.join() 转换为字符串列表

import numpy as np

# 创建一个字符串类型的 numpy 数组
array_str = np.array(['numpyarray.com', 'is', 'awesome'])

# 使用 np.char.join() 方法连接数组元素
joined_str = np.char.join(' ', array_str)

# 使用 split() 方法将字符串转换为列表
list_str = joined_str.tolist().split()

print(list_str)  # 输出: ['numpyarray.com', 'is', 'awesome']

8. 使用 np.apply_along_axis() 方法

当我们需要对数组的每个元素应用一个函数并将结果转换为列表时,np.apply_along_axis() 方法非常有用。这个方法可以沿着指定的轴应用一个函数。

示例代码 15: 使用 np.apply_along_axis() 应用函数并转换为列表

import numpy as np

# 创建一个一维 numpy 数组
array_1d = np.array([1, 2, 3, 4, 5])

# 定义一个函数,将每个元素加倍
def double(x):
    return x * 2

# 使用 np.apply_along_axis() 方法应用函数
applied_array = np.apply_along_axis(double, 0, array_1d)

# 转换为列表
list_1d = applied_array.tolist()

print(list_1d)  # 输出: [2, 4, 6, 8, 10]

Output:

如何将 Numpy 数组转换为列表

9. 使用 np.vectorize() 方法

np.vectorize() 方法提供了一种将函数向量化的方式,使得函数可以直接应用于数组的每个元素。然后我们可以将结果转换为列表。

示例代码 16: 使用 np.vectorize() 向量化函数并转换为列表

import numpy as np

# 创建一个一维 numpy 数组
array_1d = np.array([1, 2, 3, 4, 5])

# 定义一个函数,将每个元素加倍
def double(x):
    return x * 2

# 使用 np.vectorize() 方法向量化函数
vec_double = np.vectorize(double)

# 应用向量化函数
applied_array = vec_double(array_1d)

# 转换为列表
list_1d = applied_array.tolist()

print(list_1d)  # 输出: [2, 4, 6, 8, 10]

Output:

如何将 Numpy 数组转换为列表

10. 使用 np.ndenumerate() 方法

当我们需要在转换为列表的同时保留数组元素的索引时,np.ndenumerate() 方法非常有用。这个方法返回一个迭代器,产生数组的索引和对应的值。

示例代码 17: 使用 np.ndenumerate() 保留索引并转换为列表

import numpy as np

# 创建一个一维 numpy 数组
array_1d = np.array([1, 2, 3, 4, 5])

# 使用 np.ndenumerate() 方法获取索引和值
list_1d = [(index, value) for index, value in np.ndenumerate(array_1d)]

print(list_1d)  # 输出: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

Output:

如何将 Numpy 数组转换为列表

总结,Numpy 提供了多种方法将数组转换为列表,包括 tolist() 方法、列表推导式、flatten() 方法、concatenate() 方法、hstack()vstack() 方法、array_str()array_repr() 方法、char.join() 方法、apply_along_axis() 方法、vectorize() 方法以及 ndenumerate() 方法。这些方法可以满足我们在不同场景下的转换需求。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程