我有一个python的点列表(x / y坐标):
[(200, 245), (344, 248), (125, 34), ...]
它表示2d平面上的轮廓。我想使用一些numpy / scipy算法进行平滑,插值等。它们通常需要numpy数组作为输入。例如scipy.ndimage.interpolation.zoom
。
从我的积分列表中获取正确的numpy数组的最简单方法是什么?
编辑:我在问题中添加了“图片”这个词,希望现在很清楚,我真的很抱歉,如果它有点误导。我的意思的例子(指向二进制图像数组)。
输入:
[(0, 0), (2, 0), (2, 1)]
输出:
[[0, 0, 1],
[1, 0, 1]]
在此处舍入接受的答案是工作样本:
import numpy as np
coordinates = [(0, 0), (2, 0), (2, 1)]
x, y = [i[0] for i in coordinates], [i[1] for i in coordinates]
max_x, max_y = max(x), max(y)
image = np.zeros((max_y + 1, max_x + 1))
for i in range(len(coordinates)):
image[max_y - y[i], x[i]] = 1
答案 0 :(得分:6)
啊,现在好了,所以你确实拥有了想要填补的所有要点......那么它非常简单:
image = np.zeros((max_x, max_y))
image[coordinates] = 1
您可以先创建一个数组,但这不是必需的。
答案 1 :(得分:2)
numpy.array(your_list)
numpy有非常广泛的文档,您应该尝试阅读。您可以在线找到它或在REPL上键入help(obj_you_want_help_with)
(例如help(numpy)
)。
答案 2 :(得分:0)
以Jon Clements和Dunes所说的为基础做完
new_array = numpy.array([(200, 245), (344, 248), (125, 34), ...])
您将获得一个二维数组,其中第一列包含x坐标,第二列包含y坐标。该数组可以进一步拆分为单独的x和y数组,如下所示:
x_coords = new_array[:,0]
y_coords = new_array[:,1]