向 NumPy 数组添加列

向 NumPy 数组添加列

参考:add column to numpy array

在数据处理和科学计算中,经常需要对数据进行格式化或重构,其中一个常见的操作是向现有的 NumPy 数组中添加一列。本文将详细介绍如何在 PythonNumPy 库中向数组添加列,包括不同的方法和技术,以及它们的适用场景。

1. 使用 numpy.column_stack 添加列

numpy.column_stack 函数用于将一维或二维数组作为列堆叠到一个二维数组中。这是添加列的一种非常直接的方法,特别是当你从一维数组开始时。

示例代码 1

import numpy as np

# 创建一个初始数组
array1 = np.array([[1, 2], [3, 4], [5, 6]])

# 创建要添加的列
new_column = np.array([7, 8, 9])

# 使用 column_stack 添加列
result = np.column_stack((array1, new_column))

print(result)

Output:

向 NumPy 数组添加列

2. 使用 numpy.hstack 添加列

当你需要向数组添加列时,如果已经有一个二维数组,可以使用 numpy.hstack 来水平堆叠。

示例代码 2

import numpy as np

# 创建一个初始数组
array2 = np.array([[10, 20], [30, 40], [50, 60]])

# 创建要添加的列,需要先将其转换为二维数组
new_column2 = np.array([[70], [80], [90]])

# 使用 hstack 添加列
result2 = np.hstack((array2, new_column2))

print(result2)

Output:

向 NumPy 数组添加列

3. 使用 numpy.append 添加列

numpy.append 函数可以在指定的轴上添加数据,但使用时需要注意形状匹配的问题。

示例代码 3

import numpy as np

# 创建一个初始数组
array3 = np.array([[100, 200], [300, 400], [500, 600]])

# 创建要添加的列
new_column3 = np.array([700, 800, 900])

# 使用 append 添加列,注意需要指定 axis=1
result3 = np.append(array3, new_column3[:, np.newaxis], axis=1)

print(result3)

Output:

向 NumPy 数组添加列

4. 使用切片和赋值添加列

如果你想在现有数组的基础上直接修改数组,可以使用切片和赋值的方式来添加列。

示例代码 4

import numpy as np

# 创建一个足够大的数组
array4 = np.zeros((3, 3))

# 填充前两列
array4[:, :2] = np.array([[1, 2], [3, 4], [5, 6]])

# 添加新的一列
array4[:, 2] = [7, 8, 9]

print(array4)

Output:

向 NumPy 数组添加列

5. 使用 numpy.insert 添加列

numpy.insert 允许你在任意位置插入列,不仅限于末尾。

示例代码 5

import numpy as np

# 创建一个初始数组
array5 = np.array([[110, 120], [130, 140], [150, 160]])

# 创建要插入的列
new_column5 = np.array([170, 180, 190])

# 使用 insert 在第一列位置插入新列
result5 = np.insert(array5, 1, new_column5, axis=1)

print(result5)

Output:

向 NumPy 数组添加列

6. 使用 numpy.concatenate 添加列

numpy.concatenate 是一个通用函数,可以在任何指定的轴上连接数组序列。

示例代码 6

import numpy as np

# 创建一个初始数组
array6 = np.array([[210, 220], [230, 240], [250, 260]])

# 创建要添加的列,需要先将其转换为二维数组
new_column6 = np.array([[270], [280], [290]])

# 使用 concatenate 添加列
result6 = np.concatenate((array6, new_column6), axis=1)

print(result6)

Output:

向 NumPy 数组添加列

7. 使用 numpy.lib.stride_tricks.as_strided 添加列

这是一个高级技巧,允许你通过修改数组的步长来创建新的视图,而不实际复制数据。

示例代码 7

import numpy as np
from numpy.lib.stride_tricks import as_strided

# 创建一个初始数组
array7 = np.array([[310, 320], [330, 340], [350, 360]])

# 创建要添加的列
new_column7 = np.array([370, 380, 390])

# 获取原数组的形状和步长
shape, strides = array7.shape + (1,), array7.strides + (array7.strides[-1],)

# 使用 as_strided 创建新视图
expanded_array7 = as_strided(array7, shape=shape, strides=strides)

# 将新列复制到新视图的最后一列
expanded_array7[:, :, -1] = new_column7[:, np.newaxis]

print(expanded_array7)

Output:

向 NumPy 数组添加列

8. 使用 numpy.pad 添加列

numpy.pad 可以在数组的边缘添加数据,也可以用来添加列。

示例代码 8

import numpy as np

# 创建一个初始数组
array8 = np.array([[410, 420], [430, 440], [450, 460]])

# 创建要添加的列
new_column8 = np.array([470, 480, 490])

# 使用 pad 添加列
result8 = np.pad(array8, ((0, 0), (0, 1)), mode='constant', constant_values=0)
result8[:, -1] = new_column8

print(result8)

Output:

向 NumPy 数组添加列

9. 使用广播添加列

在 NumPy 中,广播允许你执行数组间的算术运算,即使它们的形状不完全匹配。

示例代码 9

import numpy as np

# 创建一个初始数组
array9 = np.array([[510, 520], [530, 540], [550, 560]])

# 创建要添加的列,使用广播机制
new_column9 = np.array([570, 580, 590])

# 使用广播添加列
result9 = np.hstack((array9, new_column9[:, np.newaxis]))

print(result9)

Output:

向 NumPy 数组添加列

10. 使用 numpy.lib.recfunctions.append_fields 添加列

这是一个专门用于结构化或记录数组的函数,允许你向这些数组添加列。

示例代码 10

import numpy as np
from numpy.lib.recfunctions import append_fields

# 创建一个结构化数组
array10 = np.array([(1, 2), (3, 4), (5, 6)], dtype=[('A', 'i4'), ('B', 'i4')])

# 创建要添加的列
new_column10 = np.array([7, 8, 9])

# 使用 append_fields 添加列
result10 = append_fields(array10, 'C', new_column10, usemask=False)

print(result10)

Output:

向 NumPy 数组添加列

以上是向 NumPy 数组添加列的十种不同方法。每种方法都有其适用场景和优缺点,选择合适的方法可以使数据处理更加高效和灵活。在实际应用中,根据具体需求和现有数据结构选择最合适的方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程