初始化具有3维的空向量

时间:2017-11-08 20:28:18

标签: python arrays numpy

我想初始化一个包含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的零也会起作用。

2 个答案:

答案 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)])