Python 如何确保和数组中的索引只包含有效的输入?
所以,我试图对一个数组进行热编码,这个问题就出现了。每当我尝试执行代码时,它都会说有索引错误。我正在谷歌实验室编写代码 我曾尝试使用双方括号来解决这个问题,但仍然没有解决方案Python 如何确保和数组中的索引只包含有效的输入?,python,pandas,Python,Pandas,所以,我试图对一个数组进行热编码,这个问题就出现了。每当我尝试执行代码时,它都会说有索引错误。我正在谷歌实验室编写代码 我曾尝试使用双方括号来解决这个问题,但仍然没有解决方案 def read_dataset(): df = pd.read_csv("sonar.all-data.csv") x = df[df.columns[0:60]].values y = df[df.columns[60]] encoder = LabelEncoder() enc
def read_dataset():
df = pd.read_csv("sonar.all-data.csv")
x = df[df.columns[0:60]].values
y = df[df.columns[60]]
encoder = LabelEncoder()
encoder.fit(y)
y = oneHotEncode(y)
return(x, y)
def oneHotEncode(labels):
n_labels = len(labels)
n_unique_labels = len(np.unique(labels))
oneHE = np.zeros((n_labels, n_unique_labels))
oneHE[np.arange(n_labels), labels] = 1
return oneHE
预期输出是一个包含所有自变量的数组x,以及包含所有因变量的数组y,该因变量是一个热编码的。但将显示以下错误消息:
IndexError Traceback
oneHE[np.arange(n_labels), labels] = 1
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
我会在你想要的范围内循环。嵌套列表是用
List[x][y]
引用的,而不是List[x,y]
你说的索引应该等于一,即np.arange(n_标签),labels
。这就是你想要的还是你忘了把它们作为函数的参数
你现在所做的相当于
import numpy as np
a = [1,2,3,4,5]
a[np.arange(5), [1,2,3,4,5]] = 1
但是表达式
np.arange(5),[1,2,3,4,5]
的计算结果是(数组([0,1,2,3,4]),[1,2,3,4,5])
,因此您尝试使用的索引是数组和列表的元组 我会在你想要的范围内循环。嵌套列表是用List[x][y]
引用的,而不是List[x,y]
你说的索引应该等于一,即np.arange(n_标签),labels
。这就是你想要的还是你忘了把它们作为函数的参数
你现在所做的相当于
import numpy as np
a = [1,2,3,4,5]
a[np.arange(5), [1,2,3,4,5]] = 1
但是表达式
np.arange(5),[1,2,3,4,5]
的计算结果是(数组([0,1,2,3,4]),[1,2,3,4,5])
,因此您尝试使用的索引是数组和列表的元组 将来,为了更加清晰,将您的进口产品包括在内将是有益的
我这样做:
x = df[df.columns[0:max(df.__len__(), 60)]].values
y = df[df.columns[0:max(df.__len__(), 60)]]
使用
\uuuu len\uuuu
应该可以避免索引问题。我不确定您的csv文件的大小,但有60个,因为最大arg可能需要,也可能不需要。将来,为了更加清晰,将导入内容包括在内将是有益的
我这样做:
x = df[df.columns[0:max(df.__len__(), 60)]].values
y = df[df.columns[0:max(df.__len__(), 60)]]
使用
\uuuu len\uuuu
应该可以避免索引问题。我不确定您的csv文件大小,但有60个,因为最大参数可能需要,也可能不需要。我可以通过以下方式重现您的错误:
In [1]: labels = ['one','two']
In [2]: arr = np.zeros((2,2))
In [3]: arr[np.arange(2), labels]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-3-957dfbe132f5> in <module>
----> 1 arr[np.arange(2), labels]
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
一般来说,我们不会事先测试指标的有效性。相反,我们使用它们并从错误中学习。此错误消息枚举numpy数组的有效索引类型。如果您想了解更多详细信息,请研究numpy文档。我可以通过以下方法重现您的错误:
In [1]: labels = ['one','two']
In [2]: arr = np.zeros((2,2))
In [3]: arr[np.arange(2), labels]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-3-957dfbe132f5> in <module>
----> 1 arr[np.arange(2), labels]
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
一般来说,我们不会事先测试指标的有效性。相反,我们使用它们并从错误中学习。此错误消息枚举numpy数组的有效索引类型。如果您想了解更多详细信息,请研究numpy文档。为什么尝试使用双方括号?哪里这与错误消息有什么关系?为什么尝试使用双方括号?哪里这与错误消息有什么关系。错误不会发生在数据帧索引中,也不会说任何关于越界值的内容。错误不会发生在数据帧索引中,也不会说任何关于越界值的内容。这与错误消息有什么关系?我在操作代码中没有看到嵌套列表
oneHE
是通过np.zeros
调用创建的。在列表上使用此索引会产生不同的错误消息。这与错误消息有什么关系?我在操作代码中没有看到嵌套列表oneHE
是通过np.zeros
调用创建的。对列表使用此索引会产生不同的错误消息。