我有以下问题。我有一个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.5
和25.51 295.263 1.5
附近设置一个框,然后选择一个框aorund 25.51 295.263 1.5
和26.743 294.526 1.5
,依此类推。为了更好地理解,我想要像这里的坐标,但当然是3D:
而不喜欢这里:
有没有简单的numpy,scipy方法来做到这一点?
答案 0 :(得分:1)
$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()