numpy 解决IndexError问题的最佳方法是什么?

6tdlim6h  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(124)

我正在编写一个程序来生成一个输出,但是我遇到了一个IndexError,其中包含以下行:

X_out[index_1, index_2, X_subset] = 1

字符串
下面是我得到的错误。

IndexError                                Traceback (most recent call last)
Cell In[18], line 20
     18 index_1 = np.repeat(np.arange(batch_size), seq_len).reshape(batch_size, seq_len)
     19 index_2 = np.arange(seq_len)
---> 20 X_out[index_1, index_2, X_subset] = 1

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices


我需要帮助来解决这个问题。这是我的代码;

import pandas as pd
import numpy as np
data = {'Name': ['Tom', 'Joseph', 'Krish', 'John'], 'Age': [20, 21, 19, 18]}  

df = pd.DataFrame(data)  

batch_size=2
vocab_size=2

n_samples = len(df['Name'])
seq_len = len(df['Name'][0])
X=df['Name']
Y=df['Age']
start = 0       
stop = start + batch_size
X_subset = X[start: stop]
X_out = np.zeros([batch_size, seq_len, vocab_size])
index_1 = np.repeat(np.arange(batch_size), seq_len).reshape(batch_size, seq_len)
index_2 = np.arange(seq_len)
X_out[index_1, index_2, X_subset] = 1

vohkndzv

vohkndzv1#

运行代码:

IndexError                                Traceback (most recent call last)
Cell In[142], line 18
     16 index_1 = np.repeat(np.arange(batch_size), seq_len).reshape(batch_size, seq_len)
     17 index_2 = np.arange(seq_len)
---> 18 X_out[index_1, index_2, X_subset] = 1

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

字符串
查看问题行中的变量:

In [143]: X_out.shape
Out[143]: (2, 3, 2)
In [144]: index_1
Out[144]: 
array([[0, 0, 0],
       [1, 1, 1]])
In [145]: index_2
Out[145]: array([0, 1, 2])


到目前为止还可以。但是:

In [146]: X_subset
Out[146]: 
0       Tom
1    Joseph
Name: Name, dtype: object


这显然不是一个有效的指数。它是一个Series,具有对象类型和字符串值。
index_1是(2,3); index_2是(3,);它们一起广播,并选择前2个维度中的所有元素。

X_out[index_1, index_2, :]


是有效的索引;选择所有X_out。Sames X_out[:]
index_1也可以是(2,1)形状;不需要重复。

In [155]: np.arange(batch_size)[:,None]
Out[155]: 
array([[0],
       [1]])


我不知道最后一个vocab_size维度索引应该是什么。显然不是一连串的话。
其他的是(2,3)和(3,),它只能是(3,)或标量。但是如果[0,1,0],重复值会做什么?不可能是[0,1]

X_out[index_1, index_2, index_1]=3


可以;再次使用(2,3)和(3,)广播。

相关问题