【问题标题】:Appending pairs of coordinates to numpy array将坐标对附加到 numpy 数组
【发布时间】:2019-05-25 20:18:19
【问题描述】:

我需要在 python 3.6 中使用numpy 将一维数组(坐标)附加到二维数组中。

我可以使用 append 对列表执行此操作,例如下面的第一个示例。

mastlist =[]
i=0
for i in  range (10):
    i=i+1
    coor = []
    xcoor = i
    ycoor =i*2
    coor.append(xcoor)
    coor.append(ycoor)
    mastlist.append(coor)
print(mastlist)

但我想要一种使用numpy 数组的更高效的方法。当我尝试将列表方法转换为数组时(第二个示例),

import numpy as np
i=0
for i in  range (10):
    i=i+1
    centroid =np.append(i,i*2)
    masterarray=np.append([centroid],axis=0)
    print(masterarray)

print(masterarray)

我收到以下错误。

我的错误是:

TypeError: append() 缺少 1 个必需的位置参数:'values'

我希望有一个数组,例如:

[[1, 2], [2, 4], [3, 6], [4, 8], [5, 10], [6, 12], [7, 14], [8, 16], [9, 18], [10, 20]]

我也尝试过使用extendvstackconcatenate

欢迎任何建议。

【问题讨论】:

  • 列表追加优于重复的 numpy 连接。做对会更快、更容易。
  • 小清理mastlist.append([xcoor,ycoor])
  • 质心值是否总是连续的,np.arange(10) 和 *2?
  • 质心值并不总是可以考虑和 *2。

标签: arrays python-3.x numpy


【解决方案1】:

我建议您先获取单个坐标数据,然后将它们连接起来。据我所知,我认为 np.append 无法做到这一点

常用的方法是np.concatenate,我是从cs231n类看到的。

我的示例代码如下:

import numpy as np
xcoor = np.arange(1,11,1).reshape(-1,1)
ycoor = np.arange(2,22,2).reshape(-1,1)
xycoor = np.concatenate((xcoor,ycoor),axis = 1)
print(xycoor)

输出:

[[ 1  2]
 [ 2  4]
 [ 3  6]
 [ 4  8]
 [ 5 10]
 [ 6 12]
 [ 7 14]
 [ 8 16]
 [ 9 18]
 [10 20]]

【讨论】:

    【解决方案2】:

    为什么不直接使用列表推导式?

    import numpy as np
    
    masterarray = np.array([[i,2*i] for i in range(1,11)])
    

    输出

    array([[ 1,  2],
           [ 2,  4],
           [ 3,  6],
           [ 4,  8],
           [ 5, 10],
           [ 6, 12],
           [ 7, 14],
           [ 8, 16],
           [ 9, 18],
           [10, 20]])
    

    【讨论】:

    • 我认为列表解析在我的“现实生活”应用程序中不起作用,因为坐标 (x,y) 不会从循环中的表达式产生。
    • 那么,您的问题与您的“现实生活”应用程序不一致。 ;)
    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2017-05-22
    • 2021-02-21
    • 2021-10-25
    相关资源
    最近更新 更多