我想初始化一个包含3列的空矢量,我可以添加。在添加到行之后,我需要对行执行一些l2范数距离计算,并且我遇到以下问题。
我从一个初始的空数组开始:
accepted_clusters = np.array([])
然后我将第一组1x3值添加到此:
accepted_clusters = np.append(accepted_clusters, X_1)
返回:
[ 0.47843416 0.50829221 0.51484499]
然后我以相同的方式添加第二组1x3值,我得到以下内容:
[ 0.47843416 0.50829221 0.51484499 0.89505277 0.8359252 0.21434642]
然而,我想要的是这样的:
[ 0.47843416 0.50829221 0.51484499]
[ 0.89505277 0.8359252 0.21434642]
.. and so on
这将使我能够计算行之间的距离。理想情况下,初始空向量的长度不确定,但如果代码很容易,则类似10x3的零也会起作用。
答案 0 :(得分:3)
最直接的方法是使用np.vstack
:
In [9]: arr = np.array([1,2,3])
In [10]: x = np.arange(20, 23)
In [11]: arr = np.vstack([arr, x])
In [12]: arr
Out[12]:
array([[ 1, 2, 3],
[20, 21, 22]])
注意,你的整个方法都有很大的代码味道,在循环中执行上述操作会给你二次复杂性。也许你应该使用一个列表,然后在最后转换为一个数组(至少是线性时间)。或者可能完全重新思考你的方法。
或者,正如您所暗示的,您可以预先分配您的数组:
In [18]: result = np.zeros((10, 3))
In [19]: result
Out[19]:
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
In [20]: result[0] = x
In [21]: result
Out[21]:
array([[ 20., 21., 22.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
答案 1 :(得分:1)
您可以尝试使用vstack添加行。
accepted_clusters=np.vstack([accepted_clusters,(0.89505277, 0.8359252, 0.21434642)])