我在for循环的每次迭代中创建大小为20x30x30x3
的numpy数组。我想将所有这些numpy数组连接成一个更大的数组。如果迭代步骤为100,则我想要的numpy数组应该为2000x30x30x3
。我尝试使用列表:
new_one_arr1_list = []
new_one_arr2_list = []
all_arr1 = np.array([])
for item in one_arr1: # 100 iterations
item = np.reshape(item, (1, 30, 30, 3))
new_one_arr1 = np.repeat(item, 20, axis=0)
all_arr1 = np.concatenate(([all_arr1 , new_one_arr1 ]))
ind = np.random.randint(one_arr2.shape[0], size=(20,))
new_one_arr2= one_arr1[ind]
new_one_arr1_list.append(new_one_arr1)
new_one_arr2_list.append(new_one_arr2)
在每个迭代步骤new_one_arr1
和new_one_arr2
中,它们的大小为20x30x30x3
。最后,当我转换new_one_arr1_list
和new_one_arr2_list
时,其大小为100x20x30x30x3
。我怎样才能在一个numpy数组中最后获得2000x30x30x3?
编辑:我尝试使用级联将数组添加到numpy数组all_arr1
中,方法是:all_arr1= np.concatenate(([all_arr1, new_one_arr1]))
,但是我收到了以下消息:
ValueError:所有输入数组的维数必须相同
答案 0 :(得分:1)
为了创建连接并解决错误,我用None初始化了数组,并测试了循环中是否为None。
因此,您不必担心尺寸不匹配。
但是,我为您只描述的数组创建了一些数组,并最终以(400, 30, 30, 3)
的形式出现。
从20*20 = 400
开始,这适合这里。
希望这对您有所帮助。
new_one_arr1_list = []
new_one_arr2_list = []
one_arr1 = np.ones((20,30,30,3))
one_arr2 = np.ones((20,30,30,3))
all_arr1 = None
count = 0
for item in one_arr1: # 100 iterations
item = np.reshape(item, (1, 30, 30, 3))
new_one_arr1 = np.repeat(item, 20, axis=0)
# print(all_arr1.shape, new_one_arr1.shape)
if all_arr1 is None:
all_arr1 = new_one_arr1
else:
all_arr1 = np.concatenate(([all_arr1 , new_one_arr1 ]), axis=0)
ind = np.random.randint(one_arr2.shape[0], size=(20,))
new_one_arr2= one_arr1[ind]
new_one_arr1_list.append(new_one_arr1)
new_one_arr2_list.append(new_one_arr2)
count += 1
print(count)
all_arr1.shape
答案 1 :(得分:0)
使用文档中给出的np.concatenate操作: https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.concatenate.html
不要在第一次迭代中连接,它会引发尺寸错误,只需在第一次迭代中将其复制即可。对于其余的迭代,请继续串联。
new_one_arr1_list = []
new_one_arr2_list = []
all_arr1 = np.array([])
firstIteration = True
for item in one_arr1: # 100 iterations
item = np.reshape(item, (1, 30, 30, 3))
new_one_arr1 = np.repeat(item, 20, axis=0)
if firstIteration:
all_arr1 = new_one_arr1
firstIteration=False
else:
all_arr1 = np.concatenate(([all_arr1 , new_one_arr1 ]))
ind = np.random.randint(one_arr2.shape[0], size=(20,))
new_one_arr2= one_arr1[ind]
new_one_arr1_list.append(new_one_arr1)
new_one_arr2_list.append(new_one_arr2)