我正在尝试将元素插入到空的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]
答案 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)