Numpy 将列表重塑为n维数组

Numpy 将列表重塑为n维数组

Numpy是Python语言的一个数值计算库,它可以用来处理各种类型的数据,方便进行数据分析和科学计算。其中一个非常常用的操作就是将列表/数组重塑为n维数组(ndarrays)。本文将介绍如何使用Numpy来实现这一重塑操作。

阅读更多:Numpy 教程

numpy.reshape()方法

Numpy中的reshape()方法是用来重塑数组形状的。该方法会返回一个新的数组对象,这个对象能够重新组织输入数组的元素,使其按照新的形状(shape)重新排列。下面是一个简单的示例:

import numpy as np

# 定义一个2x3的列表
lst = [[1, 2, 3], [4, 5, 6]]

# 将列表重塑为2x3的ndarray
arr = np.reshape(lst, (2, 3))

# 输出ndarray对象
print(arr)

输出结果如下:

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

上面的例子中,我们首先定义了一个2×3的列表,然后使用reshape()方法将其重塑为2×3的ndarray。其中reshape()方法的第一个参数是输入数组(这里是lst),第二个参数是新的形状(这里是(2, 3)),表示将原来的2维数组形状改为2行3列。

numpy.ndarray.shape属性

实际上,在Numpy中,每个ndarray对象都有一个shape属性,它是一个元组,表示ndarray对象的形状。我们可以通过shape属性来完成批量重塑的任务,例如:

import numpy as np

# 定义一个3x4x5的ndarray
arr = np.random.random((3, 4, 5))

# 输出原始的形状
print("原始形状:", arr.shape)

# 批量重塑为6x10的ndarray
new_arr = arr.reshape(-1, 6, 10)

# 输出新的形状
print("新的形状:", new_arr.shape)

上面的例子中,首先我们定义了一个3x4x5的ndarray(即3个4×5的2维数组),然后通过reshape()方法将其重塑为6×10的ndarray。需要注意的是,reshape()方法的第一个参数为-1时,表示自动计算第一维的大小,也就是说,该参数并不影响ndarray对象的形状计算。

numpy.newaxis属性

在Numpy中,使用newaxis属性可以用来将一个数组升维。也就是说,我们可以利用newaxis在数组的某一维上添加一个新的维度。例如:

import numpy as np

# 定义一个1维数组
arr = np.array([1, 2, 3, 4])

# 在第一维上添加一个新的维度
new_arr = arr[np.newaxis, :]

# 输出形状
print(arr.shape, "->", new_arr.shape)

上面的例子中,我们首先定义了一个1维数组,然后使用newaxis属性在第一维上添加了一个新的维度,最终得到了一个2维数组。需要注意的是,newaxis属性可以用来在多个维度上添加新的维度,例如:

import numpy as np

# 定义一个2维数组
arr = np.random.random((3, 4))

# 在第一维和第三维上添加新的维度
new_arr = arr[:, :, np.newaxis, :, np.newaxis]

# 输出形状
print(arr.shape, "->", new_arr.shape)

上面的例子中,我们首先定义了一个3×4的2维数组,然后使用newaxis属性在第一维和第三维上分别添加了新的维度,最终得到了一个5维数组。

numpy.ravel()方法和numpy.flatten()方法

在Numpy中,ravel()方法和flatten()方法可以用来将多维数组转换为一维数组。这两个方法的区别在于,当原数组为多维数组时,ravel()方法返回的是一个视图(view)对象,该对象引用了原数组的数据,因此修改视图会同时修改原数组。而flatten()方法则返回一个拷贝(copy)对象,该对象会复制一份原数组的数据,因此修改拷贝不会影响原数组。

import numpy as np

# 定义一个3x4的多维数组
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 使用ravel()方法转换为一维数组
ravel_arr = arr.ravel()

# 使用flatten()方法转换为一维数组
flatten_arr = arr.flatten()

# 修改ravel_arr,并输出原数组
ravel_arr[0] = 100
print("修改ravel_arr后的原数组为:", arr)

# 修改flatten_arr,并输出原数组
flatten_arr[0] = 100
print("修改flatten_arr后的原数组为:", arr)

上面的例子中,我们使用了ravel()方法和flatten()方法将一个3×4的多维数组转换为一维数组,并使用修改操作演示了这两个方法的区别。

需要注意的是,ravel()方法和flatten()方法的返回值都是一维数组,因此如果原数组为多维数组,我们可以在转换之前使用reshape()方法将其重塑为一维数组再进行转换操作。

numpy.transpose()方法

在Numpy中,transpose()方法可以用来交换数组的维度。该方法会返回一个新的数组对象,该对象会将输入数组的维度按照指定的顺序进行交换。例如:

import numpy as np

# 定义一个2x3的二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 使用transpose()方法交换维度
new_arr = arr.transpose()

# 输出交换维度后的数组
print(new_arr)

上面的例子中,我们首先定义了一个2×3的二维数组,然后使用transpose()方法交换了其维度,最终得到了一个3×2的二维数组。

需要注意的是,我们可以在transpose()方法中传入一个元组来指定交换维度的顺序。例如:

import numpy as np

# 定义一个2x3x4的三维数组
arr = np.random.random((2, 3, 4))

# 按照2->0->1的顺序交换维度
new_arr = arr.transpose((2, 0, 1))

# 输出交换维度后的数组
print(new_arr)

上面的例子中,我们首先定义了一个2x3x4的三维数组,然后使用transpose()方法按照2->0->1的顺序交换维度,最终得到了一个4x2x3的三维数组。

总结

本文介绍了如何使用Numpy来将列表/数组重塑为n维数组,并涉及了reshape()方法、ndarray.shape属性、newaxis属性、ravel()方法、flatten()方法、transpose()方法等相关知识点。如果您想要深入地学习Numpy相关的知识,可以参考官方文档或者相关的教程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程