Как указать несколько параметров "num" для функции np.linspace? - PullRequest
0 голосов
/ 19 февраля 2020

Интересно, есть ли способ настроить функцию 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.

Так что я был бы очень рад, если бы кто-нибудь мог помочь мне решить эту проблему. Заранее спасибо

С уважением,

Эрве

...