Python:围绕折线

时间:2017-05-05 10:15:35

标签: python arrays numpy scipy

我有以下问题。我有一个numpy坐标数组(条目0到2),并希望定义我的coordiante列表对之间的小方框的所有坐标,而不是围绕列表中所有坐标的最小值和最大值创建一个巨大的框。例如,在坐标对周围的框应该有5的范围。

我的列表例如如下:

[[  24.313  294.679    1.5      1.       0.   ]
 [  25.51   295.263    1.5      2.       0.   ]
 [  26.743  294.526    1.5      3.       0.   ]
 ..., 
 [  30.362  307.242   10.779   95.       0.   ]
 [  29.662  307.502   10.38    96.       0.   ]
 [  29.947  308.99    11.147   97.       0.   ]]

我的第一个想法是计算每对的最小值和最大值,并使用itertools.product来创建小方块的坐标。所以我希望在24.313 294.679 1.525.51 295.263 1.5附近设置一个框,然后选择一个框aorund 25.51 295.263 1.526.743 294.526 1.5,依此类推。为了更好地理解,我想要像这里的坐标,但当然是3D:

enter image description here

而不喜欢这里:

有没有简单的numpy,scipy方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

enter image description here

$using:RootPathDestination
带垫的

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

# create some data; in 2D so we can plot stuff
x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
data = np.c_[x,y]

# --------------------------------------------------
# core bit: get boxes
# bboxes = np.array([data[:-1], np.diff(data, axis=0)]).transpose([1,2,0]) # shorter but with negative widths, etc
data_pairs = np.array([data[:-1], data[1:]])
minima = data_pairs.min(axis=0)
maxima = data_pairs.max(axis=0)
widths = maxima-minima
bboxes = np.array([minima, widths]).transpose(1,2,0)
# --------------------------------------------------

# plot
fig, ax = plt.subplots(1,1)
ax.plot(data[:,0], data[:,1], 'ko')
for bbox in bboxes:
    patch = Rectangle(xy=bbox[:,0], width=bbox[0,1], height=bbox[1,1], linewidth=0., alpha=0.5)
    ax.add_artist(patch)

plt.show()

enter image description here