如何将元素添加到空的2d numpy数组

时间:2019-07-25 04:05:50

标签: python numpy

我正在尝试将元素插入到空的2d numpy数组中。但是,我没有得到想要的东西。

我尝试了np.hstack,但是它只给我一个普通的数组。然后我尝试使用append,但这给了我一个错误。

错误:

ValueError:所有输入数组的维数必须相同

randomReleaseAngle1 = np.random.uniform(20.0, 77.0, size=(5, 1))
randomVelocity1 = np.random.uniform(40.0, 60.0, size=(5, 1))
randomArray =np.concatenate((randomReleaseAngle1,randomVelocity1),axis=1)

arr1 = np.empty((2,2), float)
arr = np.array([])

for i in randomArray:
    data = [[170, 68.2, i[0], i[1]]] 
    df = pd.DataFrame(data, columns = ['height', 'release_angle', 'velocity', 'holding_angle']) 
    test_y_predictions = model.predict(df)
    print(test_y_predictions) 
    if (np.any(test_y_predictions == 1)):
        arr = np.hstack((arr, np.array([i[0], i[1]])))
        arr1 = np.append(arr1, np.array([i[0], i[1]]), axis=0) 

print(arr)
print(arr1)

我想得到

[[1.5,2.2],
[3.3,4.3],
[7.1,7.3],
[3.3,4.3],
[3.3,4.3]]

但是,我得到

[56.60290125 49.79106307 35.45102444 54.89380834 47.09359271 49.19881675
 22.96523274 44.52753514 67.19027156 54.10421167]

2 个答案:

答案 0 :(得分:1)

推荐的列表附加方法:

In [39]: alist = []                                                                                          
In [40]: for i in range(3): 
    ...:     alist.append([i, i+10]) 
    ...:                                                                                                     
In [41]: alist                                                                                               
Out[41]: [[0, 10], [1, 11], [2, 12]]
In [42]: np.array(alist)                                                                                     
Out[42]: 
array([[ 0, 10],
       [ 1, 11],
       [ 2, 12]])

如果我们以empty((2,2))数组开头:

In [47]: arr = np.empty((2,2),int)                                                                           
In [48]: arr                                                                                                 
Out[48]: 
array([[139934912589760, 139934912589784],
       [139934871674928, 139934871674952]])
In [49]: np.concatenate((arr, [[1,10]],[[2,11]]), axis=0)                                                    
Out[49]: 
array([[139934912589760, 139934912589784],
       [139934871674928, 139934871674952],
       [              1,              10],
       [              2,              11]])

请注意,empty与列表[]的含义不同。这是一个真正的2x2数组,具有“未指定”值。当我们向其中添加其他数组时,这些值仍然保留。

我可以从维度为0的数组开始:

In [51]: arr = np.empty((0,2),int)                                                                           
In [52]: arr                                                                                                 
Out[52]: array([], shape=(0, 2), dtype=int64)
In [53]: np.concatenate((arr, [[1,10]],[[2,11]]), axis=0)                                                    
Out[53]: 
array([[ 1, 10],
       [ 2, 11]])

这看起来更像是列表追加方法。但是为什么要首先从(0,2)数组开始?

np.concatenate接受一个数组列表(或可以组成数组的列表)。我使用了构成(1,2)个数组的嵌套列表。这样我就可以在轴0上加入它们了。

每个concatenate都会创建一个新数组。因此,如果迭代完成,则比列表附加项要昂贵。

np.append仅接受2个数组并进行连接。因此并没有增加太多。 hstack调整形状并在第2维(水平)上连接。 vstack是另一个变体。但是它们最终都使用concatenate

答案 1 :(得分:0)

使用hstack方法,您可以在获得最终数组后重新塑形:

arr = arr.reshape(-1, 2)
print(arr)

可以通过类似的方式更轻松地完成另一种方法:

        arr1 = np.append(arr1, np.array([i[0], i[1]]) # in the loop

arr1 = arr1.reshape(-1, 2)
print(arr1)