我收到此错误该如何解决此问题
def fprop(self, input_data, target_data):
tmp = [(t, i) for i, t in enumerate(target_data)]
z = zip(*tmp) # unzipping trick !
cost = np.sum(np.log(input_data[z]))
if self.size_average:
cost /= input_data.shape[1]
错误
cost = np.sum(np.log(input_data[z]))
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
答案 0 :(得分:0)
您应该告诉我们一些有关代码和数据的信息。是您写的还是别人的?它是新的还是在以前有用,可能是在其他情况下?什么是:
input_data, target_data
但是让我们做出一个合理的猜测,并逐步探索代码(这是您应该自己做的事情):
In [485]: alist = [1,3,0,2]
In [486]: tmp = [(t,i) for i,t in enumerate(alist)]
In [487]: tmp
Out[487]: [(1, 0), (3, 1), (0, 2), (2, 3)]
In [488]: z = zip(*tmp)
In [489]: z
Out[489]: <zip at 0x7ff381d50188>
在Python 3中,zip
生成zip
对象,即生成器。显然,它不能作为任何内容的索引。
我们可以将其变成一个列表,这就是Python2要做的:
In [490]: list(z)
Out[490]: [(1, 3, 0, 2), (0, 1, 2, 3)]
但是该元组列表有些不错:
In [491]: x = np.arange(16).reshape(4,4)
In [492]: x[_490]
/usr/local/bin/ipython3:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
#!/usr/bin/python3
Out[492]: array([ 4, 13, 2, 11])
如果我们将其转换为元组的元组,则numpy
会在没有警告的情况下工作:
In [493]: x[tuple(_490)]
Out[493]: array([ 4, 13, 2, 11])
这与使用alist
为每一列选择一个值相同:
In [494]: x[alist, np.arange(4)]
Out[494]: array([ 4, 13, 2, 11])
In [495]: x
Out[495]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
最初我应该将zip
扩展为tuple
:
In [502]: x[tuple(zip(*tmp))]
Out[502]: array([ 4, 13, 2, 11])
已经解决了这个问题,现在我怀疑这段代码最初适用于Python2。