Код: Выделить всё
@jit(nopython=True, fastmath=True, cache=True)
def ti_matrices(in_mat, dt):
# Definition of the matrices for ti
mat0 = in_mat['rot_M']*1/(dt**2) + in_mat['rot_D']*1/(2*dt)
mat1 = in_mat['rot_K'] - in_mat['rot_M']*2/(dt**2)
mat0_inv = inv(mat0)
in_mat['sch_invA'] = (mat0_inv+mat0_inv.T)/2
in_mat['sch_mat1'] = np.dot(in_mat['sch_invA'], mat1)
return in_mat
Код: Выделить всё
in_matКод: Выделить всё
in_mat = Dict.empty(
key_type=types.unicode_type,
value_type=types.float64[:, :],
)
Код: Выделить всё
np.dot() is faster on contiguous arrays...
Тогда я подумал, что проблема может быть в том, как Numba их читает. массивы. Я нашел интересный пост, в котором предполагается, что может помочь изменение типов в определениях словарей. Таким образом, я изменил определение словаря следующим образом:
Код: Выделить всё
in_mat = Dict.empty(
key_type=types.unicode_type,
value_type=types.float64[:, ::1],
)
Мне удалось воспроизвести проблему неоднократно. Таким образом, кажется, что предупреждение Numba не соответствует действительности... Это заставляет меня задать следующие вопросы:
- есть ли способ определить Numba словари и заставить их быть C-непрерывными?
- вы когда-нибудь сталкивались с таким противоречивым предупреждением в Numba?
- как такое предупреждение может появиться, когда оба массива помечены как C_CONTIGUOUS ?
Подробнее здесь: https://stackoverflow.com/questions/789 ... -and-numba