2017-01-16 56 views
1

比方说,我有3D NumPy的ndarray与形状(n, 0, 2),我想连续填补它连同形状(1,2)的条目的第一维,使用一些功能像vstack“vstack”荷兰国际集团在3D numpy的ndarray

换句话说,我想从(n, 0, 2)ndarray转换为(n, m, 2)之一。但是,由于我不知道m,我需要一些动态更新我的数组。

可能吗?

+0

请您详细说明一下。大小为'(n,0,2)'的第一个数组有零个元素,并且将继续存在,直到所有维数都大于零。我看不出如何通过添加/填充形状元素'(1,2)'来实现这一点。 –

+0

@HannesOvrén我更新了问题,希望现在更清楚。 – AreTor

+1

我仍然不知道你应该如何从'(n,0,2)'到'(n,1,2)'以'(1,2)'数组作为新数据。前者有'2n'个元素,但后者只有'2'个元素。 –

回答

2

要建立一个3D阵列“动态”这是更好地收集子阵列在一个列表,并在年底

In [21]: alist = [] 
In [22]: for i in range(3): 
    alist.append(np.arange(i,i+8).reshape(2,4)) 
    ....:  
In [23]: alist 
Out[23]: 
[array([[0, 1, 2, 3], 
     [4, 5, 6, 7]]), array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]), array([[2, 3, 4, 5], 
     [6, 7, 8, 9]])] 

一旦收集它们可以在任何兼容的方式连接执行“堆叠”一旦。 np.array在开始时将它们连接在一个新轴上。

In [24]: np.array(alist) 
Out[24]: 
array([[[0, 1, 2, 3], 
     [4, 5, 6, 7]], 

     [[1, 2, 3, 4], 
     [5, 6, 7, 8]], 

     [[2, 3, 4, 5], 
     [6, 7, 8, 9]]]) 
In [25]: _.shape 
Out[25]: (3, 2, 4) 

np.stack可以做同样的,也可以创建其他新中轴线的位置。

In [26]: np.stack(alist,axis=1).shape 
Out[26]: (2, 3, 4) 

concatenatevstack加入在现有的轴线。

In [27]: np.concatenate(alist, axis=0).shape 
Out[27]: (6, 4) 

从具有0维度的数组开始是很差的练习。您不要fill it in。最好你将它与其他3d阵列连接起来。这是一个缓慢且容易出错的模仿,附加到[]列表。

相关问题