Присвоение массивов переменной длины массиву 2D numpy

#python #arrays #pandas #numpy

#python #массивы #панды #numpy

Вопрос:

Я пытаюсь присвоить массивы переменной длины массиву 2D NumPy с переменным начальным индексом (смещением). Я справился с помощью цикла, но мне интересно узнать, есть ли более разумный способ, например, с использованием итераторов, векторизации или других методов.

Вот пример кода:

 >>> rd
array([array([-35., -31., -27., -23., -19., -14., -10.,  -5.]),
       array([-24., -21., -18., -15., -11.,  -8.,  -4.]),
       array([-7., -6., -4., -2.]),
       array([-16., -13., -11.,  -8.,  -6.,  -3.])], dtype=object)
>>> offset = np.array([2,3,0,1])
>>> res = np.zeros((offset.size,10))
>>> for i in range(offset.size) :
...     res[i, offset[i]:offset[i] rd[i].size] = rd[i] 
... 
>>> res
array([[  0.,   0., -35., -31., -27., -23., -19., -14., -10.,  -5.],
       [  0.,   0.,   0., -24., -21., -18., -15., -11.,  -8.,  -4.],
       [ -7.,  -6.,  -4.,  -2.,   0.,   0.,   0.,   0.,   0.,   0.],
       [  0., -16., -13., -11.,  -8.,  -6.,  -3.,   0.,   0.,   0.]])
>>> 
 

rd заполнил res матрицу с правильным смещением.
Но есть ли способ получить тот же результат, избегая цикла for, чтобы ускорить выполнение?

Комментарии:

1. Покажите некоторые результаты на этом пути. Я не могу запустить код в своей голове и предпочитаю не запускать весь скрипт на своем компьютере.

2. Вы также можете упростить пример кода, чтобы сосредоточиться на том, что действительно важно. Например, вам действительно нужны dataframe npf вычисления and `? Является ли этот последний цикл предметом вашего вопроса?

3. @hpaulj, спасибо за комментарий. Да, последний цикл является предметом моего вопроса.

4. Похоже на вопрос о заполнении массива. Это обсуждалось несколько раз в прошлом. Проще всего объяснить itertools.zip_longest . Существует более причудливый метод, разработанный Divakar, но его сложнее объяснить и привести навскидку.