如何解决 Python 错误 IndexError: Arrays Used as Indices Must Be of Integer (Or Boolean) Type
在 Python 中使用 Numpy 数组时,您可能会遇到处理索引或类型问题的不同错误消息。 在这些错误类型中,IndexError:用作索引的数组必须是整数(或布尔)类型可能很棘手。
当我们面对 IndexError 错误信息时,我们使用了错误的 Type。 在这种情况下,我们应该使用整数或布尔值,但数组索引接收另一种数据类型(字符串或浮点数)。
在本文中,我们将解释在 Numpy 中处理数字时如何处理 IndexError: Arrays used as indices must be of integer (or boolean) type 错误消息。
使用 astype() 解决 IndexError: arrays used as indices must be of integer (or boolean) type
Numpy 仅适用于两种类型,Integer 或 Boolean。 因此,如果有一个它不理解的类型,它就会抛出一个错误。
让我们重新创建错误消息以更好地理解此错误消息。 要重新创建错误消息,我们需要生成两个 Numpy 数组,index 和 array,从 index 中提取值,并使用提取的值访问 array 中的值。
对于提取的值,我们将使用第一列值。
import numpy as np
index = np.array([
[0, 1, 2.1],
[1, 2, 3.4]
])
array = np.array([
[1, 2, 3],
[4, 5, 6]
])
indices = index[:, 0]
print(array[indices])
输出:
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\index.py", line 13, in <module>
print(array[indices])
IndexError: arrays used as indices must be of integer (or boolean) type
从 IndexError: arrays used as indices must be of integer (or boolean) type 错误消息中,我们知道问题源于 print(array[indices])
部分。
因为我们知道它在语法上是正确的,所以我们知道我们正在寻找的问题存在于我们解析到数组绑定的内容中。 这将我们带到了索引绑定。
从错误消息中我们知道,索引绑定中的元素可能不是整数或布尔值。 dtype 属性可用于检查索引中元素的类型。
print(indices.dtype)
输出:
float64
现在,这证实了我们面临的问题的原因。 我们传递给数组绑定索引的值是 float64 而不是布尔值。
为了解决这个问题,我们需要将 indices 中的值转换为 Integer 或 Boolean。 将它们转换为整数更有意义。
下次将它们转换为布尔值可能会有用。
astype()
方法有助于修改 Numpy 数组的 dtype 属性。 要修改索引绑定的数据类型,我们可以使用以下内容。
indices = index[:,0].astype(int)
如果我们使用 indices.dtype 表达式检查 dtype 属性,我们会得到以下结果。
int32
现在,我们的代码变成:
import numpy as np
index = np.array([
[0, 1, 2.1],
[1, 2, 3.4]
])
array = np.array([
[1, 2, 3],
[4, 5, 6]
])
indices = index[:, 0].astype(int)
print(array[indices])
输出:
[[1 2 3]
[4 5 6]]
我们可以将索引的值转换为布尔值。 让我们试验一下。
为此,我们有一个带有两个布尔值的 Numpy 数组。
indices = index[:, 0].astype(bool)
print(indices)
输出:
[False True]
索引绑定的值为 [0. 1.]
,当将 0 转换为布尔值时,它给出 False,而任何其他数字给出 True。 让我们一起运行一切。
import numpy as np
index = np.array([
[0, 1, 2.1],
[1, 2, 3.4]
])
array = np.array([
[1, 3, 5],
[7, 9, 11]
])
indices = index[:, 0].astype(bool)
print(array[indices])
输出:
[[ 7 9 11]]
那是因为它只处理真值。
因此,当我们遇到 IndexError: arrays used as indices must be of integer (or boolean) type 错误消息时,请知道某处有错误的数据类型。 跟踪您的代码,并转换必要的值。
相关文章
Python 中错误 ValueError: Invalid Literal for Float()
发布时间:2023/05/17 浏览次数:53 分类:Python
-
Python 中 ValueError: invalid literal for float()。 float() 函数无法将字符串类型转换为浮点数。 相反,它会抛出一个 ValueError,它可能会因您的 Python 版本而异。
Python 错误 TypeError: Unhashable Type: List
发布时间:2023/05/17 浏览次数:95 分类:Python
-
本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。
Python 中错误 AttributeError: __Exit__
发布时间:2023/05/17 浏览次数:113 分类:Python
-
尝试用 Python 开发新程序时出错是很常见的。 AttributeError 是 Python 中最常见的错误之一。在本文中,我们将看看如何解决这个 AttributeError: __exit__ 错误,并且我们将通过相关示例和解释来讨论这
Python 错误 TypeError: __str__ Returned Non-String but Printing Output
发布时间:2023/05/17 浏览次数:142 分类:Python
-
本文旨在解决当我们尝试打印字符串而不是在函数中使用 return 语句时出现的问题。Python 错误TypeError: __str__ Returned Non-String but Printing Output
Python 中错误 Path Python3 (From --Python=Python3) Does Not Exist
发布时间:2023/05/17 浏览次数:141 分类:Python
-
错误 The path python3 (from --python=python3) does not exist 可能有几个原因。一种可能是您的系统上没有安装 Python 3。 另一种可能是您安装了多个版本的 Python,而您尝试使用的版本不在您的 PATH 中。
如何解决 Python 中 Urllib HTTP Error 403 Forbidden Message 错误
发布时间:2023/05/17 浏览次数:140 分类:Python
-
今天的文章解释了如何处理错误消息(异常),urllib.error.HTTPError: HTTP Error 403: Forbidden,当它遇到一个被禁止的资源时,由错误类代表请求类产生。Python 中的 urllib 模块
如何解决 Python 错误 ValueError: I/O Operation on Closed File
发布时间:2023/05/17 浏览次数:188 分类:Python
-
本文着眼于 Python 中的一个错误:ValueError: I/O operation on closed file。 解决 Python 中由于缩进不当发生的错误 ValueError: I/O operation on closed file
如何解决 Python 中错误 NameError: Global Name 'unicode' Is Not Defined
发布时间:2023/05/17 浏览次数:198 分类:Python
-
本文将讨论 Python 中错误 NameError: global name 'unicode' is not defined 的原因和解决方法。Python 中 NameError: global name 'unicode' is not defined 的原因
如何解决 Python 中错误 ModuleNotFoundError: No Module Named 'cPickle'
发布时间:2023/05/17 浏览次数:55 分类:Python
-
本文讨论 Python ModuleNotFoundError: No module named 'cPickle' 错误的可能原因及解决方法。解决Python ModuleNotFoundError: No module named 'cPickle' 错误