range(0,32)
в Python похож на 0:31
в MATLAB, за исключением того, что он не обрабатывается до использования (как в цикле for
или list(range(0,32))
).
Если правильно вызвать MATLAB, LayerMapInference{j}
должно быть cell
с индексированием {}
(в отличие от () индексирования матрицы).
Я читаю size(Filters{j},3)
как:
Filters{j} # the jth item in the Filters cell
size(...,3) # the 3rd dimension of that object (a 3d matrix?)
В numpy
это было бы примерно
Filters[j].shape[2]
где Filters
- массив dtype списка или объекта, который может содержать разнообразную коллекцию элементов. Элемент [j]
(считая от 0) должен быть массивом с атрибутом shape
. np.size(Filters[j],2)
также будет работать, но обычно мы используем shape
вместо size
(с параметром axis).
So
repmat(MapInference,8,8,size(Filters{j},3),BatchSize)
принимает матрицу MapInference
и копирует ее для получения матрицы (8,8,size(),BatchSize)
(4d).
numpy.matlab.repmat
похоже на старое время MATLAB repmat
(v 3.5). Он предназначен для работы с np.matrix
, который является двумерным массивом.
In [659]: repmat(np.arange(4),3,2)
Out[659]:
array([[0, 1, 2, 3, 0, 1, 2, 3],
[0, 1, 2, 3, 0, 1, 2, 3],
[0, 1, 2, 3, 0, 1, 2, 3]])
In [660]: repmat(np.arange(4),3,2,3)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-660-c5acb9021d92> in <module>
----> 1 repmat(np.arange(4),3,2,3)
TypeError: repmat() takes 3 positional arguments but 4 were given
Поэтому используйте np.repeat
или np.tile
.