python - IndexError:范围对象索引超出范围错误
问题描述
嗨,我有以下代码用完索引。如何修复可以解决超出范围错误的矩阵的索引。
我试过修改过滤器范围。但这并不走运。
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)
解决方案
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]
whereFilters
是一个列表或对象 dtype 数组,可以保存各种项目的集合。项目[j]
(从 0 开始计数)必须是具有shape
属性的数组。 np.size(Filters[j],2)
也可以,但通常我们使用shape
而不是size
(使用轴参数)。
所以
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
2d 数组。
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
ornp.tile
代替。
推荐阅读
- angular - 如何使用 EventEmitter 将函数传递给子组件?
- hana - 将 CV 中数据的输入参数设置为 HANA 中其他 CV 中的输入参数
- c# - 为 Episerver、Episerver 11、tinyMCE 2.5.0 的 tinyMCE 上的 Styleselect 添加字体菜单
- angular - How to animate ionic page/modal to slide in from right
- excel - 将数据存储在word文件中
- laravel - Laravel 重写 $model->someQueryHere->get()
- c++ - 如果有 std::thread,Visual Studio 2017 linux 无法编译
- excel - 在 Excel 数组公式结果中查找匹配项
- python - 使用python从树结构中删除类属性
- php - “糟糕,发生错误” Instagram 登录错误