У меня есть массив Numpy, содержащий информацию из 56 рентгеновских лучей (arr1, Array of float32) с одним столбцом, содержащим 56 массивов [95200,2] (arr2, Array of object), связанных с arr1. Моя цель состоит в том, чтобы перебрать оба массива и создать новый массив, содержащий информацию из arr1 для каждой строки в arr2 (arr_out).
Как способ практики я Я хотел бы реализовать Numba, чтобы ускорить процесс, однако, это приводит к ошибкам Numba, которые мне трудно решить.
Если я правильно понимаю, это в основном вызвано arr2, так как это массив объектов, однако я не могу заставить себя работать над решением.
Может ли кто-нибудь дать мне пу sh?
Мой текущий код;
@numba.jit
def fill():
arr_out = np.empty((0,6))
row, column = arr1.shape
for row in range(0,row):
print('Row number: {}'.format(row))
matrix = arr2[row]
matrix_rows = len(matrix)-1
for m_row in range(0, matrix_rows):
inp_arr = [np.hstack((arr1[row, 0:4],matrix[matrix_row]))]
arr_out = np.vstack((arr_out, inp_arr))
return arr_out
Edit : Я забыл показать предупреждения;
Compilation is falling back to object mode WITH looplifting enabled because Function "fillspec" failed type inference due to: Untyped global name 'arr2': Unsupported array dtype: object
File "<ipython-input-44-7e98fec24979>", line 7:
def fillspec():
<source elided>
print('Row number: {}'.format(row))
matrix = arr2[row]
Есть и другие, но если я правильно понимаю, они связаны с этим первоначальным предупреждением. (Я не чувствую, что дамп предупреждения добавит к моему вопросу:))
(термин «вложенный массив» в этом случае правильный?)
Edit 2 : Как указано, определение arr2, скорее всего, важно; Чтобы определить arr1 как float, я вынул arr2 как таковой;
arr2 = arr_orig[:,8]
arr1 = np.delete(arr_orig,8, axis=1)
arr1 = arr1.astype(np.float32)
Это оставляет arr2 как массив объектов, однако вложенные массивы внутри arr2 определены как float.