Python 附加具有不同维度的numpy数组

Python 附加具有不同维度的numpy数组,python,arrays,pandas,numpy,Python,Arrays,Pandas,Numpy,我正在尝试附加或连接两个不同维度的numpy数组。到目前为止还不太好 因此,作为一个例子 a = np.arange(0,4).reshape(1,4) b = np.arange(0,3).reshape(1,3) 我正在努力 G = np.concatenate(a,b,axis=0) 我得到一个错误,因为a和b不是同一个维度。我需要连接a和b的原因是,我试图递归地求解一个模型,并且状态空间随时间而变化。因此,我需要调用最后一个值函数作为输入,以获得下一个时间段的值函数,等等: for

我正在尝试附加或连接两个不同维度的
numpy
数组。到目前为止还不太好

因此,作为一个例子

a = np.arange(0,4).reshape(1,4)
b = np.arange(0,3).reshape(1,3)
我正在努力

G = np.concatenate(a,b,axis=0)
我得到一个错误,因为a和b不是同一个维度。我需要连接a和b的原因是,我试图递归地求解一个模型,并且状态空间随时间而变化。因此,我需要调用最后一个值函数作为输入,以获得下一个时间段的值函数,等等:

for t in range(T-1,0,-1):

    VG,CG = findv(VT[-1])

    VT = np.append(VT,VG,axis=0)  
    CT = np.append(CT,CG,axis=0) 
但是,VT从一个时间段到下一个时间段有不同的维度

有人知道如何处理不断改变尺寸的VT和CT
numpy
阵列吗

好的-谢谢你的意见。。。我需要输出为以下形式:

G = [[0, 1, 2, 3],
     [0, 1, 2]]
如果我写G[-1],我会得到最后一个元素

[0,1,2].
我不知道这是不是一个numpy数组

谢谢你,杰斯珀。

试试这个方法:

import numpy as np
a = np.arange(4).reshape(2,2)
b = np.arange(6).reshape(2,3)
c = np.arange(8).reshape(2,4)
a
# array([[0, 1],
#       [2, 3]])
b
# array([[0, 1, 2],
#       [3, 4, 5]])
c
# array([[0, 1, 2, 3],
#       [4, 5, 6, 7]])
np.hstack((a,b,c))
#array([[0, 1, 0, 1, 2, 0, 1, 2, 3],
#       [2, 3, 3, 4, 5, 4, 5, 6, 7]])
希望能有帮助。
谢谢

您缺少一个括号

请参阅下面的连接文档

以上将为您提供串联输出c,如下所示:

array([[0, 1, 2, 3, 0, 1, 2]])

您无法真正堆叠具有不同尺寸或尺寸的阵列

这是一个列表(如果我理解正确的话,这是您想要的输出类型):

转换为numpy数组:

G_np = np.array(G)

>>> G_np.shape 
(2,)
>>> G_np 
array([list([0, 1, 2, 3]), list([0, 1, 2])], dtype=object)
>>>
您的解决方案(根据您的要求):

编辑:关于评论中的问题

我必须承认我不知道如何用正确的方法做这件事

但是如果一个黑客的方式是好的(也许是正确的方式),那么:

或者这样-但是,使用numpy没有任何意义

注意:

老实说,我认为numpy不适合收集对象(如下列表)。 如果我是你的话,我会一直在后面加上一个真正的清单。最后,我会把它转换成numpy。但毕竟,我不知道你的申请,所以我不知道什么是最好的态度

In [71]: a,b,c = np.arange(0,4), np.arange(0,3), np.arange(0,7)
很容易将这些数组一次全部或增量地放入列表中:

In [72]: [a,b,c]
Out[72]: [array([0, 1, 2, 3]), array([0, 1, 2]), array([0, 1, 2, 3, 4, 5, 6])]
In [73]: G =[a,b]
In [74]: G.append(c)
In [75]: G
Out[75]: [array([0, 1, 2, 3]), array([0, 1, 2]), array([0, 1, 2, 3, 4, 5, 6])]
我们可以从该列表中创建一个对象数据类型数组

In [76]: np.array(G)
Out[76]: 
array([array([0, 1, 2, 3]), array([0, 1, 2]),
       array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
请注意,有时这可能会产生2d阵列(如果所有子阵列的大小相同)或错误。通常情况下,最好还是坚持列表

通常不建议重复追加或连接到数组。做正确的事情更难,做起来更慢

但让我们展示一下:

In [80]: G = np.array([a,b])
In [81]: G
Out[81]: array([array([0, 1, 2, 3]), array([0, 1, 2])], dtype=object)
c
通过一个简单的连接得到“扩展”:

In [82]: np.concatenate((G,c))
Out[82]: 
array([array([0, 1, 2, 3]), array([0, 1, 2]), 0, 1, 2, 3, 4, 5, 6],
      dtype=object)
相反,我们需要将
c
包装在其自身的对象数据类型数组中:

In [83]: cc = np.array([None])
In [84]: cc[0]= c
In [85]: cc
Out[85]: array([array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
In [86]: np.concatenate((G,cc))
Out[86]: 
array([array([0, 1, 2, 3]), array([0, 1, 2]),
       array([0, 1, 2, 3, 4, 5, 6])], dtype=object)

通常,当我们连接时,数据类型必须匹配,或者至少是兼容的。这里,所有输入都需要是对象数据类型。当连接复合数据类型(结构化数组)时,也同样适用。只有在连接简单的数字类型(和字符串)时,我们才可以忽略数据类型(前提是我们不关心整数变成浮点数等)。

np.concatenate((a,b),axis=0)
额外的参数是至关重要的
np.hstack([a,b])
我认为它应该沿着轴1@madphestics,考虑到reshape@yatu我同意,作为答案发布的
G
是一个列表。就这样吧。好吧,我明白了。。。如果我需要c矩阵是[[0,1,2,3],[0,1,2]],这样我就可以调用c[-1]=[0,1,2]?你不能有一个不规则的数组,把它排列起来,告诉我这是否是你要找的,定义数组而不重塑,然后是np.c_[[a,b]],所以我写了a=np.arange(0,4)和b=np.arange(0,3)和G_npy=np.array([a,b])。这看起来是正确的。然后我会得到一个需要添加到G_npy的更新。称之为c=np.arange(0,7)。如何将c添加到G_npy列表中?如果我写G_npy=np.c[[G_npy,c]],我会得到一些看起来不对的东西。我需要G_npy=array([[array([0,1,2,3]),[array([0,1,2]),[array([0,1,2,3,4,5,6])],dtype=object)。看起来好多了。。。不过我有一个问题。。。我得到了很多关于G_np列表的更新。。。假设G_np现在等于array([array([0,1,2,3]),array([0,1,2]),dtype=object)。让我们定义c=np.arange(0,7),我需要将它“附加”到G_np。。。我做G_npy=np.array([G_npy,c])。但现在我无法识别G_npy的各个元素!G_npy[0]是我不想要的数组([array([0,1,2,3]),数组([0,1,2]),dtype=object)。。。我需要G_npy[0]=数组[0,1,2,3]?
In [72]: [a,b,c]
Out[72]: [array([0, 1, 2, 3]), array([0, 1, 2]), array([0, 1, 2, 3, 4, 5, 6])]
In [73]: G =[a,b]
In [74]: G.append(c)
In [75]: G
Out[75]: [array([0, 1, 2, 3]), array([0, 1, 2]), array([0, 1, 2, 3, 4, 5, 6])]
In [76]: np.array(G)
Out[76]: 
array([array([0, 1, 2, 3]), array([0, 1, 2]),
       array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
In [80]: G = np.array([a,b])
In [81]: G
Out[81]: array([array([0, 1, 2, 3]), array([0, 1, 2])], dtype=object)
In [82]: np.concatenate((G,c))
Out[82]: 
array([array([0, 1, 2, 3]), array([0, 1, 2]), 0, 1, 2, 3, 4, 5, 6],
      dtype=object)
In [83]: cc = np.array([None])
In [84]: cc[0]= c
In [85]: cc
Out[85]: array([array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
In [86]: np.concatenate((G,cc))
Out[86]: 
array([array([0, 1, 2, 3]), array([0, 1, 2]),
       array([0, 1, 2, 3, 4, 5, 6])], dtype=object)