实现Numba时要与嵌套的Numpy数组作斗争

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

我有一个Numpy数组,其中包含来自56幅X射线的信息(arr1,float32数组),其中一列包含与arr1相关的56个数组[95200,2](arr2,对象数组)。我的目标是遍历两个数组,并为arr2(arr_out)中的每一行创建一个包含来自arr1的信息的新数组。

[作为一种实践,我想实现Numba以加快速度,但是这确实会引发Numba错误,而我无法解决。

如果我正确理解的话,这主要是由arr2引起的,因为它是对象数组,但是我无法全力以赴寻求解决方案。

有人可以给我推吗?

我当前的代码;

@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

编辑

:我忘了显示警告;
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内部的嵌套数组are

定义为float。

我有一个Numpy数组,其中包含来自56幅X射线的信息(arr1,float32数组),其中一列包含与arr1相关的56个数组[95200,2](arr2,对象数组)。我的目标是迭代...

arrays numpy numba
1个回答
0
投票

感谢@hpaulj的遮篷,我正在努力解决一个简单的问题。

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