Numpy: 在任意轴上重构多维数组

Numpy: 在任意轴上重构多维数组

在本文中,我们将介绍Numpy中的重构(reshaping)操作,特别是在任意轴上重构多维数组的方法。这是Numpy中一个相当有用的功能,可帮助我们处理各种数据科学工作流中常见的需要变换维度、形状的任务。我们将首先介绍Numpy中的ndarray数据类型及其属性以及一些基本操作,然后将重点关注如何在任意轴上重构多维数组。

阅读更多:Numpy 教程

Numpy 中的 ndarray 类型

在Numpy中,ndarray(n-dimensional array,多维数组)是Numpy中最重要、最常用的数据类型。它可以是一维、二维、三维或者更高维度的数组,支持各种数学运算、科学计算中的常见操作(例如排序、索引、切片等),同时由于其内部实现方式的优化,ndarray比Python内置的list类型更加高效。

我们可以使用numpy.array()方法创建numpy数组,例如:

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
# Output: [1 2 3 4 5]

arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# Output:
# [[1 2 3]
#  [4 5 6]]
Python

除了使用numpy.array()方法,我们还可以使用一些Numpy提供的用于生成特定类型、形状数组的方法,例如:

# 创建一个长度为10的一维数组,每个元素都是0
arr_zeros = np.zeros(10)
print(arr_zeros)
# Output: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

# 创建一个2x2的矩阵,每个元素都是1
arr_ones = np.ones((2, 2))
print(arr_ones)
# Output:
# [[1. 1.]
#  [1. 1.]]

# 创建一个3x3的单位矩阵
arr_eye = np.eye(3)
print(arr_eye)
# Output:
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

# 创建一个长度为5的一维数组,每个元素都在0到1之间随机分布
arr_rand = np.random.rand(5)
print(arr_rand)
# Output: [0.79075951 0.40204312 0.32250006 0.14674303 0.24785656]
Python

ndarray的一些重要属性包括:

  • ndarray.shape:数组的形状,返回一个元组表示数组大小。例如(2, 3)表示为2行3列的数组。
  • ndarray.dtype:ndarray中元素的数据类型。例如int32float64complex等。
  • ndarray.ndim:数组的维数(即轴数)。

我们可以使用这些属性来获取数组的信息,例如:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)  # Output: (2, 3)
print(arr.dtype)  # Output: int32
print(arr.ndim)   # Output: 2
Python

基础操作

在使用Numpy时,我们通常需要涉及一些基本操作,这些操作包括数组的索引、切片、排序等等。下面我们将介绍一些常用的基础操作。

索引和切片

我们可以使用类似Python中的切片的方式来获取数组中的一个子集。例如:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 获取第1行,第2列的元素(注意Numpy的索引从0开始)
print(arr[0, 1])  # Output: 2

# 获取第2行和第3行的元素
print(arr[1:3, :])  
# Output:
# [[4 5 6]
#  [7 8 9]]

# 获取第3列和第4列的元素
print(arr[:, 2:4])  
# Output:
# [[3]
#  [6]
#  [9]]
Python

排序

我们可以使用numpy.sort()方法对数组进行排序。默认情况下,numpy.sort()方法会返回排序后的数组,但并不改变原数组。例如:

import numpy as np

arr = np.array([2, 1, 4, 3, 5])
sorted_arr = np.sort(arr)

print(sorted_arr)  # Output: [1 2 3 4 5]
print(arr)         # Output: [2 1 4 3 5]
Python

另外,Numpy还提供了另一个方法ndarray.sort()来直接修改原数组:

import numpy as np

arr = np.array([2, 1, 4, 3, 5])
arr.sort()
print(arr)  # Output: [1 2 3 4 5]
Python

在任意轴上重构多维数组

在数据科学中,我们经常需要将一个数组在不同轴上进行变换,本节将介绍如何使用Numpy实现任意轴上的重构(reshaping)操作。

一维数组的重构

对于一维数组,我们可以使用numpy.reshape()方法进行重构。例如,将长度为6的一维数组重构为2×3的二维数组:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped = np.reshape(arr, (2, 3))

print(reshaped)  
# Output:
# [[1 2 3]
#  [4 5 6]]
Python

多维数组的重构

对于多维数组,我们可以指定不同的轴来进行重构。例如,将一个3x3x2的三维数组在第0个轴上进行重构(将第0个轴中的元素作为第2个轴,第2个轴中的元素作为第0个轴),得到一个2x3x3的三维数组:

import numpy as np

arr = np.array([[[1, 2], [3, 4], [5, 6]], 
                [[7, 8], [9, 10], [11, 12]], 
                [[13, 14], [15, 16], [17, 18]]])
reshaped = np.moveaxis(arr, 0, 2)

print(reshaped.shape)  
# Output: (2, 3, 3)

print(reshaped)  
# Output:
# [[[ 1  7 13]
#   [ 3  9 15]
#   [ 5 11 17]]

#  [[ 2  8 14]
#   [ 4 10 16]
#   [ 6 12 18]]]
Python

在上述代码中,我们使用了Numpy提供的np.moveaxis()方法将数组在第0个轴和第2个轴之间进行移动。这相当于将第0个轴中的元素作为第2个轴,将第2个轴中的元素作为第0个轴,从而实现了在任意轴上的重构。

总结

在本文中,我们介绍了Numpy中的重构(reshaping)操作,特别是在任意轴上重构多维数组的方法。我们首先介绍了Numpy中的ndarray数据类型及其属性以及一些基本操作,然后重点讲解了如何在任意轴上重构多维数组。这是Numpy中一个相当有用的功能,可帮助我们处理各种数据科学工作流中常见的需要变换维度、形状的任务。希望本文能够帮助读者更好地理解和应用Numpy中的重构操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册