np.transpose() 和 np.reshape() 组合在纯 numpy 和 numba 中给出不同的结果

np.transpose() and np.reshape() combination gives different results in pure numpy and in numba

以下代码产生不同的输出:

import numpy as np

from numba import njit


@njit
def resh_numba(a):
    res = a.transpose(1, 0, 2)
    res = res.copy().reshape(2, 6)
    return res

x = np.arange(12).reshape(2, 2, 3)

print("numpy")
x_numpy = x.transpose(1, 0, 2).reshape(2, 6)
print(x_numpy)

print("numba:")
x_numba = resh_numba(x)
print(x_numba)

输出:

numpy
[[ 0  1  2  6  7  8]
 [ 3  4  5  9 10 11]]
numba:
[[ 0  4  8  2  6 10]
 [ 1  5  9  3  7 11]]

这是什么原因?我怀疑某些 order='C'order='F' 发生在某处,但我希望 numpy 和 numba 在任何地方都默认使用 order='C'

这是由于(至少)np.ndarray.copy 实现导致的错误,我在这里打开了一个问题:https://github.com/numba/numba/issues/3557