Я думаю, вы хотите использовать np.ravel_multi_index
. При индексировании с нулевым индексом numpy и принимая во внимание, что массивы Matlab являются стилями Fortran, эквивалент вашему примеру в Matlab:
>>> np.ravel_multi_index((1, 0, 1), dims=(3, 4, 2), order='F')
13
Просто чтобы вы поняли, что происходит, вы можете получить тот же результат с точечным произведением ваших индексов и шагами массива:
>>> a = np.random.rand(3, 4, 2)
>>> np.dot((1, 0, 1), a.strides) / a.itemsize
9.0
>>> np.ravel_multi_index((1, 0, 1), dims=(3, 4, 2), order='C')
9
>>> a[1, 0, 1]
0.26735433071594039
>>> a.ravel()[9]
0.26735433071594039
_
заменяется на ____(m,i,n,u,a,l,s)
____(m,i,n,u,a,l,s)
, который фильтруется через макрос ____(i,s,o,g,r,a,m)(i##r##s##o)
i##r##s##o
, вставляя аргументы i, r, s, o
вместе, чтобы сформировать строку. i = m
, r = a
, s = i
, o = n
, таким образом вы получаете main