Интересно, есть ли способ настроить функцию NumPy linspace
с несколькими параметрами num
, чтобы я мог создать последовательность равномерно распределенных значений с разными интервалами без каких-либо операций для l oop.
Чтобы проиллюстрировать немного мою проблему, у меня есть следующий массив np.array, для которого я хочу подразделить 3 сегмента, представленных их 2 соответствующими вершинами на оси x, y, z:
*************************
3D SEGMENTS TO DISCRETIZE
*************************
SegmentToDiscretize = np.array([[[150.149, 167.483, 4.2 ],[160.149, 167.483, 4.2 ]],
[[148.594, 163.634, 25.8 ],[180.547, 170.667, 25.8 ]],
[[180.547, 170.667, 25.8 ],[200.547, 190.667, 25.8 ]]])
И функция складывания, предназначенная для добавления равноотстоящих точек между каждой парой вершин:
******************************
EQUIDISTANT POINTS COMPUTATION
******************************
nbsubdiv = 10
addedpoint = np.linspace(SegmentToDiscretize[:,0],SegmentToDiscretize[:,1],nbsubdiv, dtype = np.float)
Благодаря аргументу nbsubdiv
я могу указать, сколько подразделений я хочу.
Но я бы хотел чтобы указать 3 различных значения подразделений для каждого сегмента / строки, содержащиеся в моем SegmentToDiscretize np.array
[[[150.149, 167.483, 4.2 ],[160.149, 167.483, 4.2 ]], <-- nbsubdiv = 4
[[148.594, 163.634, 25.8 ],[180.547, 170.667, 25.8 ]], <-- nbsubdiv = 30
[[180.547, 170.667, 25.8 ],[200.547, 190.667, 25.8 ]]] <-- nbsubdiv = 10
Я пытался преобразовать свой параметр nbsubdiv
в list
, но безуспешно ...
nbsubdiv = [4,30,10]
addedpoint = np.linspace(SegmentToDiscretize[:,0],SegmentToDiscretize[:,1],nbsubdiv[0], dtype = np.float)
С помощью приведенного выше кода я получаю:
[[148.594 163.634 4.2 ]
[150.149 165.97833333 4.2 ]
[153.48233333 167.483 4.2 ]
[156.81566667 167.483 4.2 ]
[159.245 167.483 25.8 ]
[160.149 167.483 25.8 ]
[169.896 168.32266667 25.8 ]
[180.547 170.667 25.8 ]
[180.547 170.667 25.8 ]
[187.21366667 177.33366667 25.8 ]
[193.88033333 184.00033333 25.8 ]
[200.547 190.667 25.8 ]]
Это нормально, поскольку nbsubdiv[0]
занимает первый элемент в списке. Но мне не удалось найти способ рекурсивного использования каждого значения в этом списке без for loop
.
Так что я был бы очень рад, если бы кто-нибудь мог помочь мне решить эту проблему. Заранее спасибо
С уважением,
Эрве