【python】把6*5的数组变成3个2*5的新数组,第一行和第四行在一起,第二行和第五行在一起,第三行和第六行在一起,以及更复杂的9*5如何用循环实现

发布于:2024-07-31 ⋅ 阅读:(165) ⋅ 点赞:(0)

要将一个 6 × 5 6 \times 5 6×5 的数组变换为三个新的 2 × 5 2 \times 5 2×5 数组,并且让原数组的第1行和第4行成为第一个新数组,第2行和第5行成为第二个新数组,第3行和第6行成为第三个新数组,可以使用NumPy的索引和切片功能。

以下是实现这一转换的代码示例:

import numpy as np

# 创建一个 6x5 的示例数组
original_array = np.arange(30).reshape(6, 5)

# 按要求进行重组
new_array1 = original_array[[0, 3], :]
new_array2 = original_array[[1, 4], :]
new_array3 = original_array[[2, 5], :]

# 显示结果
print("Original Array:\n", original_array)
print("\nNew Array 1:\n", new_array1)
print("\nNew Array 2:\n", new_array2)
print("\nNew Array 3:\n", new_array3)

在这段代码中:

  • original_array 是一个形状为 (6 \times 5) 的示例数组。
  • original_array[[0, 3], :] 选择了第1行和第4行组成新的数组 new_array1
  • original_array[[1, 4], :] 选择了第2行和第5行组成新的数组 new_array2
  • original_array[[2, 5], :] 选择了第3行和第6行组成新的数组 new_array3

这种方法利用了NumPy的高级索引功能,可以轻松地选择任意行的组合。

运行结果:

Original Array:
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]
 [25 26 27 28 29]]

New Array 1:
 [[ 0  1  2  3  4]
 [15 16 17 18 19]]

New Array 2:
 [[ 5  6  7  8  9]
 [20 21 22 23 24]]

New Array 3:
 [[10 11 12 13 14]
 [25 26 27 28 29]]

由于当前环境的限制,无法直接执行代码。但是,我可以为您提供在本地实现此功能的代码示例:

import numpy as np

# 创建一个 9x5 的示例数组
original_array = np.arange(45).reshape(9, 5)

# 初始化列表来存储新的 2x5 数组
new_arrays = []

# 循环实现
for i in range(3):
    new_arrays.append(original_array[i::3, :])

# 显示结果
print("Original Array:\n", original_array)
for idx, arr in enumerate(new_arrays):
    print(f"\nNew Array {idx+1}:\n", arr)

在这段代码中:

  • original_array 是一个形状为 9 × 5 9 \times 5 9×5 的示例数组。
  • 我们使用一个循环来创建新的数组,每个新的数组包含 original_array 的某些行。具体来说,i::3 的切片表示从索引 i 开始,以步长 3 选择行。因此,original_array[0::3, :] 选择第1、4、7行,original_array[1::3, :] 选择第2、5、8行,original_array[2::3, :] 选择第3、6、9行。

每个 new_arrays[i] 结果都是一个 3 × 5 3 \times 5 3×5 的新数组。您可以在本地运行这段代码,以查看和验证结果。

运行结果:

Original Array:
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]
 [25 26 27 28 29]
 [30 31 32 33 34]
 [35 36 37 38 39]
 [40 41 42 43 44]]

New Array 1:
 [[ 0  1  2  3  4]
 [15 16 17 18 19]
 [30 31 32 33 34]]

New Array 2:
 [[ 5  6  7  8  9]
 [20 21 22 23 24]
 [35 36 37 38 39]]

New Array 3:
 [[10 11 12 13 14]
 [25 26 27 28 29]
 [40 41 42 43 44]]

在NumPy中,语法 original_array[0::3, :] 表示对数组进行切片操作。具体而言:

  • 0 是起始索引,表示从数组的第0行(第一行)开始。
  • ::3 是步长,表示每隔3行选择一行。
  • : 是列的选择,这里表示选择所有列。

所以,original_array[0::3, :] 会选择原始数组的第1、4、7行。


网站公告

今日签到

点亮在社区的每一天
去签到