将Numpy数组附加到正确的形状

时间:2017-04-18 06:41:43

标签: python numpy

我很难将x_数组附加到x,同时保持正确的形状。我试过了vstack,但它给了我一个错误。 axis=0似乎没有按照预期做任何事情。我想要一个尺寸为:,len(x_))的数组。

编辑:

帖子末尾的代码给出了以下形状的数组x_:

array([3, 0, 2, 1, 0], dtype=int32) 

我试过了:

x_ = np.append(x_,np.array([5,4,6,7,8]), axis = 0)

但是给出了:

array([3, 0, 2, 1, 0, 5, 4, 6, 7, 8])

但是,我想:

array([[3, 0, 2, 1, 0],
       [5, 4, 6, 7, 8]])

我尝试了vstack(x,x_),但得到了:

   x = np.vstack(x, x_)

TypeError: vstack() takes 1 positional argument but 2 were given

for k in range(2,9):
    temp_ = (2*k)+1
    x = np.zeros(shape=(1,temp_))
    y = []
    for i in range(k, len(number_list)-k-1):
        newk = k
        x_ = []
        while newk >= -k:
            x_.append(name[i-newk])
            newk-=1
        le = preprocessing.LabelEncoder()
        le.fit(x_)
        x_ = le.transform(x_)
        x = np.append(x, x_ , axis=0)
        y.append(residue_area[i])

2 个答案:

答案 0 :(得分:1)

np.append必须废除;它扭曲了太多初学者的想法。

np.concatenate并且所有np.?stack都将列表作为第一个参数。唯一的另一个参数是axis关键字。 np.append通过用2个参数替换该列表来改变该约定 - 然后将其调整,放入列表并调用concatenate。除非您阅读源代码,否则您无法确定它是如何首先修改尺寸的。

启动互动会话,然后使用np.concatenate进行游戏,直到您了解维度必须匹配为止。然后重新审视这个问题。

编辑:拼写错误concatenate而不是concatenante

答案 1 :(得分:0)

但您可以使用np.vstack

>>> import numpy as np
>>> x_ = np.array([3, 0, 2, 1, 0]) 
>>> x_ = np.vstack([x_, np.array([5, 4, 6, 7, 8])])
>>> x_
array([[3, 0, 2, 1, 0],
       [5, 4, 6, 7, 8]])

但一般来说,定期追加或堆叠数组是一个坏主意(因为它真的效率低下)。通常最好创建一个最终形状的数组并插入其中:

>>> x_ = np.empty((2, 5), dtype=int)
>>> x_[0] = [3, 0, 2, 1, 0]
>>> x_[1] = [5, 4, 6, 7, 8]
>>> x_
array([[3, 0, 2, 1, 0],
       [5, 4, 6, 7, 8]])