Или, что то же самое, "что эквивалентно индексированию NumPy-эллипсиса в Matlab"
Скажем, у меня есть многомерный массив:
x = zeros(3, 4, 5, 6);
Я хочу написать функцию, которая принимает массив размером (3, ...)
и выполняет некоторые вычисления. В NumPy я мог бы написать это:
def fun(x):
return x[0]*x[1] + x[2]
Однако эквивалент в MATLAB не работает, поскольку индексирование с одним целым выравнивает массив до 1d
function y = fun_bad(x)
y = x(1)*x(2) + x(3)
Я могу сделать эту работу до 3-мерных массивов с помощью
function y = fun_ok3d(x)
y = x(1,:,:)*x(2,:,:) + x(3,:,:)
Если я хочу, чтобы это работало до 10-мерных массивов, я могу написать
function y = fun_ok10d(x)
y = x(1,:,:,:,:,:,:,:,:,:)*x(2,:,:,:,:,:,:,:,:,:) + x(3,:,:,:,:,:,:,:,:,:)
Как я могу избежать написания здесь глупого числа двоеточий и просто сделать эту работу для любого измерения? Есть ли какой-то синтаксис x(1,...)
, который подразумевает это?
NumPy может использовать литерал ...
(Ellipsis
) в выражении индексации, означающий ":
столько раз, сколько необходимо", что позволило бы решить эту проблему.