博客
关于我
NumPy 数组拼接方法-ChatGPT4o作答
阅读量:795 次
发布时间:2023-02-17

本文共 2692 字,大约阅读时间需要 8 分钟。

NumPy 数组拼接详解

NumPy 提供了多种数组拼接方法,能够满足不同场景的需求。本文将从基本概念、详细解析、注意事项以及场景选择四个方面对 NumPy 数组拼接进行全面讲解。


1. 基本概念

数组拼接是指将多个数组组合成一个更大的数组。NumPy 提供了多种拼接方式,主要包括沿现有维度拼接(如行方向或列方向)和增加新维度后拼接(如堆叠到新轴上)。以下是常见的数组拼接函数及其核心区别:

函数名 描述 新增新轴?
concatenate 沿指定轴拼接数组,无新增维度
vstack 垂直堆叠,相当于 axis=0
hstack 水平堆叠,相当于 axis=1
stack 沿新轴拼接数组,增加新维度
dstack 沿深度(第三维)堆叠
append 追加元素到数组,功能类似 concatenate
column_stack 将 1D 数组作为列拼接到 2D 数组中
row_stack 将 1D 数组作为行拼接到 2D 数组中

2. 每种方法的详细解析

2.1 concatenate()

concatenate 是最通用的拼接方法,适合将多个数组沿现有轴拼接。其核心功能是将多个数组合并成一个更大的数组,且无需新增维度。

语法

np.concatenate(arrays, axis=0)

示例

import numpy as np# 示例 1:垂直拼接(默认 axis=0)a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6]])result = np.concatenate((a, b), axis=0)print(result)

输出:

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

示例 2:水平拼接(axis=1)

a = np.array([[1, 2], [3, 4]])b = np.array([[5], [6]])result = np.concatenate((a, b), axis=1)print(result)

输出:```plaintext[[1 2 5] [3 4 6]]

注意事项

  • 拼接的数组在非拼接轴上的形状必须一致。例如:
    a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6, 7]])  # 错误:形状不匹配

2.2 vstack() 和 hstack()

vstack 和 hstack 是 concatenate 的简化版本,分别用于垂直和水平堆叠。

vstack()(垂直堆叠)

np.vstack(arrays)

将多个 1D 数组垂直堆叠成一个 2D 数组。

示例:

a = np.array([1, 2])b = np.array([3, 4])result = np.vstack((a, b))print(result)

输出:

[[1 2] [3 4]]

hstack()(水平堆叠)

np.hstack(arrays)

将多个 1D 数组水平堆叠成一个 2D 数组。

示例:

a = np.array([[1], [2]])b = np.array([[3], [4]])result = np.hstack((a, b))print(result)

输出:

[[1 3] [2 4]]

2.3 stack()

stack 用于沿新轴堆叠多个数组,适合增加维度后拼接。

语法

np.stack(arrays, axis=0)

示例

a = np.array([1, 2])b = np.array([3, 4])# 沿新轴堆叠result = np.stack((a, b), axis=0)print(result)

输出:

[[1 2] [3 4]]

如果 axis=1:

result = np.stack((a, b), axis=1)print(result)

输出:

[[1 3] [2 4]]

2.4 dstack()

dstack 是专门用于沿深度(第三维)堆叠的函数。

示例:

a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])result = np.dstack((a, b))print(result)

输出:

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

2.5 append()

append 方法用于将元素追加到数组,功能类似于 concatenate,但只适用于单个元素的追加。

示例:

a = np.array([1, 2, 3])b = np.array([4, 5, 6])# 追加元素result = np.append(a, b)print(result)

输出:

[1 2 3 4 5 6]

2.6 column_stack() 和 row_stack()

column_stack()

将 1D 数组作为列拼接到 2D 数组中。

示例:

a = np.array([1, 2, 3])b = np.array([4, 5, 6])result = np.column_stack((a, b))print(result)

输出:

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

row_stack()

将 1D 数组作为行拼接到 2D 数组中。

示例:

a = np.array([1, 2, 3])b = np.array([4, 5, 6])result = np.row_stack((a, b))print(result)

输出:

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

3. 注意事项

1. 形状兼容性

  • 使用 concatenate 时,拼接的数组在非拼接轴上的形状必须相同。
  • 使用 stack 时,所有数组的形状必须完全一致。

2. 多维拼接

  • 高维数组拼接时,明确指定 axis 避免混淆。

3. 性能考虑

  • 对于大量数组拼接,优先选择 concatenate 和 stack,它们更高效。

4. 场景选择

需求 推荐方法
沿行或列拼接 concatenate
垂直堆叠 vstack
水平堆叠 hstack
增加新维度拼接 stack
拼接深度方向(三维数据) dstack
简单追加元素 append
1D 数组拼接为列或行 column_stack 或 row_stack

通过合理选择拼接方法,可以高效地完成数组操作,充分利用 NumPy 的强大功能。

转载地址:http://ogjfk.baihongyu.com/

你可能感兴趣的文章
NMF(非负矩阵分解)
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>