制作一个 numpy 数组,仅从另一个数组中选择某些行和某些列

Make a numpy array selecting only certain rows and certain columns from another

我创建了一个非常大的 NumPy 数组,大小为 500 x 10000,称为 first_array,用于使用 Crank Nicolson 方法求解偏微分方程。这个方法需要创建和使用数组中存储的所有数据,而我只需要其中的一小部分。例如,50 行和 50 列就足够了。

如何通过仅选择特定数字的倍数的那些行和列,从 first_array 创建一个较小的数组 second_array?这个任务有内置的 NumPy 方法吗?

例如,如果 first_array

array([[11, 12, 13, 14],
       [21, 22, 23, 24],
       [31, 32, 33, 34],
       [14, 42, 43, 44]])

那么我希望 second_array 是一个由 first_array 的第 1 行和第 3d 行以及 first_array 的第 2ns 和第 4 列组成的数组:

array([[12, 14],
       [32, 34],])

像这样

import numpy as np

first_array = np.random.rand(500,1000)
row_factor = 10
row_start = 1
col_factor = 10
col_start = 1
second_array = first_array[row_start:-1:row_factor,col_start:-1:col_factor]
print(second_array.shape)

您可以在两个方向跳过 row_factor 或 col_factor 的地方进行简单切片

你可以这样做:

import numpy as np
x = np.arange(100).reshape(10,10)
y = x[slice(0,-1,3), slice(0,-1,4)].copy()

现在你已经选择了每一行都是3的倍数,每一列都是4的倍数。如果你想开始,你可以调整切片startend点在特定的偏移量。

注意:如果要避免修改原数组x,需要使用.copy()。否则切片只是原始数组的视图。