У меня проблема при смещении 3D-массива с помощью функции NumPy roll.Мой массив имеет размерность u ((3, nx, ny, nz)).
Проблема в том, что нп.Функция Roll не работает так, как она предполагает.Обычно в функции крена: axis = 0 определяет смещение строк, а axis = 1 определяет смещение столбцов.Но тогда как в моем случае те же явления не работают.
Когда я пытаюсь сместить массив по строкам, используя axis = 0, массив вообще не смещается, вместо этого, если я использую axis = 1, массив смещается (axis = 1 стал строкойСдвиг), что странно.В то же время, если я пытаюсь сместить массив по столбцам, ни ось = 0, ни ось = 1 не работают.
Таким образом, для этого типа размерного массива U ((3, nx, ny, nz)) происходит только смещение строк.Ниже приведен простой пример, который я пробовал со случайными числами.
from numpy import *
import numpy as np
from math import *
u = zeros((2,3,4,4)) # Array initialized
print(u)
print('x---------------------------x')
u[0,:,0,:] = 3 # Array with random values
u[0,:,2,1] = 9
u[0,:,1,2] = 5
u[0,:,3,3] = 7
u[1,:,:,0] = 1
u[1,:,2,2] = 6
u[1,:,1,3] = 7
u[1,:,3,2] = 8
print(u)
print('x---------------------------x')
########################## Roll operations ##########################
u_sh = np.roll(u[0,:,:,:], 1, axis = 0)
print(u_sh)
print('x$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$x')
u_sh = np.roll(u[0,:,:,:], 1, axis = 1) # axis = 1 has become row shifting.
print(u_sh)
print('x$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$x')
u_sh = np.roll(u[1,:,:,:], 1, axis = 0)
print(u_sh)
print('x*******************************x')
u_sh = np.roll(u[1,:,:,:], 1, axis = 1) #Neither axis is shifting a column
print(u_sh)
Ни ось = 0, ни ось = 1 не смещают столбец