展开轮廓

问题描述 投票:0回答:1

我有如下3个数组

(Pdb) Istag
[[67, 68], [227, 228]]

(Pdb) spl
array([151, 302])

(Pdb) wspl
array([26, 52])

这些数据所代表的内容如下图所示;

enter image description here

黑色数字对应于上面数组中显示的数字,而红色数字显示转换后的数字(如果我将它们放入单个数字列表中)。弯曲部分保存在一个数组“spl”中,而直线部分保存在另一数组“wspl”中。曲线部分根据“Istag”分为两个范围,同时将直线部分添加到索引中。

基本上,我想要的是将这些数组索引转换为6个范围对象S1,S2,S3 ...等,范围应如下

S1: range( 67,   0, -1)
S2: range( 68, 151,  1)
S3: range(151, 177,  1)
S4: range(253, 178, -1)
S5: range(254, 328,  1)
S6: range(328, 380,  1)

有人可以阐明如何做到这一点吗?

python numpy range
1个回答
0
投票

确切的逻辑并不完全清楚(如果你有超过 2 个项目会发生什么?),但你应该能够使用一个小循环和

zip
:

Istag = [[67, 68], [227, 228]]
spl = np.array([151, 302])
wspl = np.array([26, 52])

out = []

prev_c = -1
prev_d = 0
for (a, b), c, d in zip(Istag, spl, wspl):
    out.extend([range(a+prev_d, prev_c+prev_d+1, -1),
                range(b+prev_d, c+prev_d),
                range(c+prev_d, c+d+prev_d)])
    prev_c = c
    prev_d = d

输出:

[range(67, 0, -1),
 range(68, 151),
 range(151, 177),
 range(253, 178, -1),
 range(254, 328),
 range(328, 380)]

注意。如果您想要实际的列表,请将上面代码中的

range(...)
替换为
list(range(...))

© www.soinside.com 2019 - 2024. All rights reserved.