[英]Appending 2-D numpy array to 3-D numpy array
我有一个循环,每次都会创建一个新的 (2, 3) 数组。 我想将 append 这些 arrays 一起创建一个新的数组 3-D 数组,我想一个例子说明了我最想做的事情。 假设我有一个数组arr1 = array([[1, 2, 3], [4, 5, 6]])
和一个数组arr2 = array([[11, 22, 33], [44, 55, 66]])
。 我想通过“添加数组”来获得一个新数组,例如arr3 = np.array([[[1, 11], [2, 22], [3, 33]], [[4,44], [5,55], [6,66]]])
。 在实践中,这看起来像:
import numpy as np
n_samples = 10
total_arr = np.empty([2, 3, n_samples])
for i in range(n_samples):
arr = np.random.rand(2,3)
total_arr.append(arr) #This is the step I don't know what do do with
print(total_arr.shape)
>>> (2, 3, 10) #Where 10 is whatever n_samples is
我目前的方法是将total_arr
为一个带有total_lst = total_arr.tolist()
和append 的列表,每个arr[i,j]
使用for 循环到total_lst
中的列表。 所以类似total_list[i][j].append(arr[i,j])
但这需要很长时间,是否有 numpy 解决方案?
谢谢
In [179]: arr1 = np.array([[1, 2, 3], [4, 5, 6]]); arr2 = np.array([[11, 22, 33], [44, 55, 66]])
In [180]: arr1
Out[180]:
array([[1, 2, 3],
[4, 5, 6]])
In [181]: arr2
Out[181]:
array([[11, 22, 33],
[44, 55, 66]])
np.stack
可以沿新轴加入 arrays 列表。 默认的行为类似于np.array([arr1, arr2])
,但看起来你想要一个新的最后一个轴:
In [182]: np.stack([arr1, arr2], axis=2)
Out[182]:
array([[[ 1, 11],
[ 2, 22],
[ 3, 33]],
[[ 4, 44],
[ 5, 55],
[ 6, 66]]])
一般来说,在列表中收集 arrays 并在最后进行一次“加入”是最好的。 尝试数组加入迭代会更慢,而且更难做对。
或者,您可以创建正确目标大小的数组,并分配元素/块。
===
新的第一轴示例:
In [183]: np.stack([arr1, arr2])
Out[183]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[11, 22, 33],
[44, 55, 66]]])
In [184]: np.stack([arr1, arr2]).transpose(1,2,0)
Out[184]:
array([[[ 1, 11],
[ 2, 22],
[ 3, 33]],
[[ 4, 44],
[ 5, 55],
[ 6, 66]]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.