NumPy数组形状最常用的7种操作方法

NumPy数组的形状操作指的是对数组的维度和形状进行变换和调整。在NumPy中,数组的形状和维度可以通过各种方法来操作,这样可以更方便地对数组进行处理和分析。

下面是对NumPy数组形状操作的详细介绍。

改变数组的形状

可以使用reshape()函数改变数组的形状,这个函数会返回一个新的数组,而不是修改原始数组的形状。语法如下:

new_array = np.reshape(old_array, new_shape)

其中,old_array是要进行形状变换的原始数组,new_shape是新的形状,可以是一个整数元组或者一个整数列表。注意,old_array的元素个数必须等于new_shape的元素个数,否则会报错。

下面是一个例子:

import numpy as np

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

# 改变数组的形状为2x6
new_arr = np.reshape(arr, (2,6))

print(new_arr)

输出结果为:

[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]]

展平数组

使用flatten()函数可以将一个多维数组展平成一维数组。与reshape()不同,flatten()函数会直接修改原始数组,而不是返回一个新的数组。语法如下:

new_array = old_array.flatten()

下面是一个例子:

import numpy as np

# 创建一个2x2的数组
arr = np.array([[1,2], [3,4]])

# 将数组展平为一维数组
new_arr = arr.flatten()

print(new_arr)

输出结果为:

[1 2 3 4]

拼接和堆叠数组

可以使用concatenate()函数来拼接两个或多个数组,语法如下:

new_array = np.concatenate((arr1, arr2, ...), axis=0)

其中,arr1、arr2等是要拼接的数组,axis参数指定拼接的方向,可以是0或1,分别表示按行拼接和按列拼接。

除了concatenate()函数外,还可以使用hstack()函数和vstack()函数来对数组进行水平和垂直堆叠。hstack()函数可以将多个数组按水平方向堆叠,而vstack()函数则是按垂直方向堆叠。语法如下:

new_array = np.hstack((arr1, arr2, ...))
new_array = np.vstack((arr1, arr2, ...))

下面是一个示例:

import numpy as np

# 创建两个数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 拼接数组
arr3 = np.concatenate((arr1, arr2))
print(arr3)

# 堆叠数组
arr4 = np.stack((arr1, arr2), axis=0)
print(arr4)

输出:

[1 2 3 4 5 6]
[[1 2 3]
 [4 5 6]]

在上面的示例中,我们首先创建了两个一维Numpy数组arr1和arr2。我们使用concatenate函数将它们拼接成一个数组arr3,其中第一个参数是要拼接的数组元组。然后我们使用stack函数将它们堆叠成一个数组arr4,其中axis参数指定了在哪个轴上进行堆叠。

需要注意的是,在使用stack函数时,我们指定了axis=0,这意味着我们将在第0个轴上堆叠两个数组,因此新数组将具有两个行和三个列。如果我们将axis参数指定为1,则新数组将具有一个行和六个列。在使用stack函数时,必须选择一个合适的轴,以确保新数组具有所需的形状。

其他操作

除了以上几个操作方法之外,还有一些常用的数组形状操作函数:

  1. resize:改变原有数组的形状。
  2. ravel:将多维数组变成一维数组,返回一个视图。
  3. transpose:对数组进行转置操作,返回一个新的数组对象。
  4. swapaxes:交换数组的两个轴,返回一个新的数组对象。

下面是一些示例代码:

import numpy as np

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

# 使用 resize 改变原有数组的形状
arr.resize((2, 4))
print(arr) #[[1 2 3 4]
           #[5 6 7 8]]

# 使用 ravel 将多维数组变成一维数组,返回一个视图
view_arr = arr.ravel()
view_arr[0] = 100  # 修改视图中的元素,原始数组也会相应地发生修改
print(arr)  # [[100   2   3]
           #  [  4   5   6]
           #  [  7   8   9]]

# 使用 transpose 对数组进行转置操作,返回一个新的数组对象
new_arr = arr.transpose()
print(new_arr)#[[1 4 7]
              #[2 5 8]
              #[3 6 9]]

# 使用 swapaxes 交换数组的两个轴,返回一个新的数组对象
new_arr = arr.swapaxes(0, 1)
print(new_arr)#[[1 4 7]
              #[2 5 8]
              #[3 6 9]]

注意事项

当改变数组形状时,需要注意以下几点:

  1. 改变数组形状时,需要确保改变后的数组元素个数和改变前的元素个数相同。否则会抛出 ValueError 异常。
  2. reshape 函数返回的是一个新的数组对象,不改变原有数组的形状。
  3. 数组的 reshape 操作可能会返回一个视图,也可能会返回一个副本。当对视图进行修改时,原始数组也会发生相应的修改;而对副本进行修改时,原始数组不受影响。
  4. 如果需要改变原有数组的形状,可以使用 resize 函数。与 reshape 不同的是,resize 函数会直接修改原有数组的形状。

以上是关于 NumPy 数组的形状操作的详细讲解和示例代码。通过学习,我们可以了解到 NumPy 数组形状操作的常用函数以及它们的作用和使用方法,从而更好地应用 NumPy 数组进行科学计算和数据处理。

本文链接:https://my.lmcjl.com/post/19718.html

展开阅读全文

4 评论

留下您的评论.