从列表

时间:2016-07-19 17:45:34

标签: python arrays

我的数组'cama'的结构如下:

shape(cama)
>>>(365, 720, 1440)

我的'lon_list'的形状如下:

shape(lon_list)
>>>(1440,)

我想要的是向cama添加或附加lon_list。所以我最终得到了一个具有以下尺寸的数组:

shape(new_cama)
>>>(365, 720, 1440, 1440)

我试过了:

new_cama = np.concatenate((cama, lon_list))
ValueError: all the input arrays must have same number of dimensions

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尺寸乘法。这意味着如果你有:

a = [[1, 2, 3], [4, 5, 6]]

你有一个包含6个元素的(2 x 3)数组。如果您想添加其他维度,例如b=[10, 20, 30, 40],则最终会得到一个(2 x 3 x 4) = 24元素数组,因此您需要提供一种方法来完成这些缺少的(24 - 4 - 6) = 14元素。你不能追加'维度:增加维度意味着在所有维度中附加newdimiension - 1元素。

那么我们可以用这样的形状做什么呢?那么,您可以广播您的数组以匹配相应的维度,并以某种方式组合它们:

In[52]: a = np.array([[1,2,3], [4,5,6]])
In[53]: b = np.array([10, 20, 30, 40])
In[54]: a
Out[54]: 
array([[1, 2, 3],
       [4, 5, 6]])
In[55]: b
Out[55]: array([10, 20, 30, 40])
In[56]: c = a[:, :, None] * b[None, None, :]
In[57]: c
Out[57]: 
array([[[ 10,  20,  30,  40],
        [ 20,  40,  60,  80],
        [ 30,  60,  90, 120]],

       [[ 40,  80, 120, 160],
        [ 50, 100, 150, 200],
        [ 60, 120, 180, 240]]])
In[58]: c.shape
Out[58]: (2L, 3L, 4L)

在这里,我将它们相乘,但当然可以使用任何其他组合:要理解的关键是:

  • 您只能将操作应用于类似形状
  • 的数组
  • 你可以效仿'更广泛的形状通过广播。

这样,我们可以通过查看'来组合(2, 3)(4,)数组。它们都作为(2, 3, 4)数组并以某种方式组合它们。但是你必须让它们成为类似形状的数组。

或者,如果数组的所有维度不同,则可以连接数组。假设你有一个(2, 3, 4, 5)数组和一个(2, 3, 7, 5)数组:那么在(2, 3, 4+7, 5)数组中连接它们是有意义的。您可以通过“模拟”来再次做到这一点。形状(基本上是通过沿着任何缺失的尺寸重复图案),但是根据你的问题,它不清楚这是你想要实现的......