IndexError:范围对象索引超出范围错误

时间:2019-06-11 01:00:51

标签: python matlab numpy

嗨,我有以下代码用完了索引。如何修复矩阵索引,以解决超出范围的误差。

我尝试修改过滤器范围。但这不是运气。

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)

1 个答案:

答案 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.repeatnp.tile