嗨,我有以下代码用完了索引。如何修复矩阵索引,以解决超出范围的误差。
我尝试修改过滤器范围。但这不是运气。
Filters = range(0,32)
for j in MapSizes:
if MapSizes[j] == 32:
LayerMapInference[j] = repmat(np.array(MapInference, 8,8, len(Filters[j][3]),Batchsize))
elif MapSizes[j] == 16:
LayerMapInference[j] = repmat(np.array(MapInference, 4,4, len(Filters[j][3]),Batchsize))
elif MapSizes[j] == 8:
LayerMapInference[j] = repmat(np.array(MapInference, 2,2, len(Filters[j][3]),Batchsize))
等效的Matlab代码:
if MapSizes(j) == 32
LayerMapInference{j} = repmat(MapInference,8,8,size(Filters{j},3),BatchSize);
elseif MapSizes(j) == 16
LayerMapInference{j} = repmat(MapInference,4,4,size(Filters{j},3),BatchSize);
elseif MapSizes(j) == 8
LayerMapInference{j} = repmat(MapInference,2,2,size(Filters{j},3),BatchSize);
end
请让我知道如何解决此错误。
np.tile解决方案会导致相同的错误
for j in MapSizes:
if MapSizes[j] == 32:
LayerMapInference[j] = np.tile(MapInference, 8,8, Filters[j].shape[2],Batchsize)
elif MapSizes[j] == 16:
LayerMapInference[j] = np.tile(MapInference, 4,4, Filters[j].shape[2],Batchsize)
elif MapSizes[j] == 8:
LayerMapInference[j] = np.tile(MapInference, 2,2, Filters[j].shape[2],Batchsize)
答案 0 :(得分:0)
range(0,32)
在Python中类似于MATLAB中的0:31
,只是在使用之前不进行评估(例如在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参数)。
所以
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
。