制作一个 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的倍数。如果你想开始,你可以调整切片start
和end
点在特定的偏移量。
注意:如果要避免修改原数组x
,需要使用.copy()
。否则切片只是原始数组的视图。
我创建了一个非常大的 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的倍数。如果你想开始,你可以调整切片start
和end
点在特定的偏移量。
注意:如果要避免修改原数组x
,需要使用.copy()
。否则切片只是原始数组的视图。