嗨,我正在尝试将 numpy 数组分成两部分,并在一个循环中进行此操作,例如:
main_array.shape = (50, 400, 400, 3)
for i = 0:
sub_array_1 would be equal to (0:10, 400, 400, 3)
sub_array_2 would be equal to (10:50, 400, 400, 3)
for i = 1:
sub_array_1 would be equal to (10:20, 400, 400, 3)
sub_array_2 would be equal to (20:50, 400, 400, 3)
etc...
如何做到这一点?
我使用以下代码,但得到了非常奇怪的结果:
i = 0
for k in range(1, k_fold+1):
sub_array_1 = main_array[np.uint8(i):np.uint8(i+len(main_array)//5)]
temp_0 = main_array[0:np.uint8(i)]
temp_1 = main_array[np.uint8(i+len(main_array)//5):]
sub_array_2 = np.concatenate((temp_0, temp_1), axis=0)
使用这个我确实获得了 2 个数组,但最终形状很奇怪。
我在这里做错了什么吗(我猜是这样)?
最佳答案
试试这个:
import numpy as np
main_array = np.random.rand(50, 400, 400, 3)
k_fold = 5
step = main_array.shape[0] / k_fold
for i in range(0,k_fold - 1):
sub_array_1 = main_array[int(step * i):int(step * (i + 1))]
sub_array_2 = main_array[int(step * (i + 1)):]
print("sub_array_1: {} -> {}".format(int(step * i),int(step * (i + 1))))
print(sub_array_1.shape, sub_array_2.shape)
print()
输出:
sub_array_1: 0 -> 10
(10, 400, 400, 3) (40, 400, 400, 3)
sub_array_1: 10 -> 20
(10, 400, 400, 3) (30, 400, 400, 3)
sub_array_1: 20 -> 30
(10, 400, 400, 3) (20, 400, 400, 3)
sub_array_1: 30 -> 40
(10, 400, 400, 3) (10, 400, 400, 3)
关于python - 除以 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59744183/