Я пытаюсь сопоставить случайно сгенерированные ndarrays из numpy с MATLAB.
import numpy as np
# Set the seed for NumPy's random generator
np.random.seed(42) #Mersenne Twister is default
# Generate complex random numbers
a = 16
b = 4
c = 10
x_py = np.random.rand(a, b, c) + 1j * np.random.rand(a, b, c)
Вот версия MATLAB:
% Set the seed for MATLAB's random generator
rng(42, 'twister') % Use the Mersenne Twister algorithm
% Generate complex random numbers
a = 16;
b = 4;
c = 10;
x_ml = rand([a, b, c], 'like', 1i);
Теперь, хотя тип начального числа и генератора совпадают, состояния не совпадают, поэтому мне не удалось сопоставить x_py и x_ml.
Я знаю, что более простой способ — сгенерировать в MATLAB, сохранить в файл и импортировать в Python, но я хочу понять разницу между тем, как работают два API, и тем, как их можно настроить, чтобы получить соответствующий результат.
Во-первых, один использует порядок C, а другой — F. Вам следует изолировать проблемы dtyoe и shape от получения одного и того же генератора.

Этот вопрос очень похож на другой, но с тем дополнением, что здесь мы имеем дело с 3D-массивами и комплексными числами.
Согласно другим вопросам и ответам, MATLAB заполняет массивы по столбцам, а Python заполняет их по строкам. Вам нужно транспонировать результат одного, чтобы он соответствовал другому. Для 3D-массивов порядок индексации в Python — [z,y,x], в MATLAB — [y,x,z]. Однако порядок хранения обратный: в MATLAB индекс y (первый) — это индекс, который индексирует смежные адреса памяти, тогда как индекс x (последний) в Python делает это. Поэтому нам нужно определить массивы с разным порядком размеров, а затем переставить размеры, чтобы они совпадали.
Другая проблема заключается в том, что в Python np.random.rand(a, b, c) + 1j * np.random.rand(a, b, c) сначала генерирует все действительные значения, а затем все мнимые значения. В MATLAB rand([a, b, c], 'like', 1i) будет генерировать реальное значение, затем мнимое, затем действительное и т. д.
Собрав все это вместе,
x_ml = permute(rand([c, b, a]) + 1j * rand([c, b, a]), [2,1,3])
создает тот же массив, что и x_py в вопросе.
Возможные дубликаты: stackoverflow.com/questions/18486241/… , stackoverflow.com/questions/62546379/… , stackoverflow.com/questions/70157083/…