如何修复:只有整数标量数组可以转换为标量索引


使用Python时可能会遇到的错误是:

 TypeError : only integer scalar arrays can be converted to a scalar index

此错误通常由以下两个原因之一引起:

1.您尝试对列表执行数组索引。

2.您尝试使用不正确的语法连接两个矩阵。

以下示例展示了如何在这两种情况下避免这些错误。

示例 1:您尝试对列表执行数组索引。

假设我们尝试使用以下代码在 matplotlib 中创建带有图例和标签的折线图:

 import numpy as np

#create a list of values
data = [3, 5, 5, 7, 8, 10, 12, 14]

#choose 3 random values from list
random_values = np. random . choice (range(len(data)), size= 2 )

#attempt to use indexing to access elements in list
random_vals = data[random_values. astype (int)]

#view results
random_vals

TypeError : only integer scalar arrays can be converted to a scalar index

我们收到错误,因为我们尝试在列表上使用数组索引。

为了避免此错误,我们必须首先使用np.array()将列表转换为 NumPy 数组,如下所示:

 import numpy as np

#create a list of values
data = [3, 5, 5, 7, 8, 10, 12, 14]

#choose 3 random values from list
random_values = np. random . choice (range(len(data)), size= 2 )

#attempt to use indexing to access elements in list
random_vals = np. array (data)[random_values. astype (int)]

#view results
random_vals

array([5, 7])

这次我们可以从列表中随机选择两个值,不会出现任何错误,因为我们首先将列表转换为 NumPy 数组。

示例 2:您尝试使用不正确的语法连接两个矩阵。

假设我们尝试使用以下代码来连接两个 NumPy 矩阵:

 import numpy as np

#create twoNumPy matrices
mat1 = np. matrix ([[3, 5], [5, 7]])
mat2 = np. matrix ([[2, 4], [1, 8]])

#attempt to concatenate both matrices
n.p. concatenate (mat1, mat2)

TypeError : only integer scalar arrays can be converted to a scalar index

我们收到错误,因为我们未能将矩阵作为元组提供给concatenate()函数。

为了避免此错误,您必须使用双括号将元组形式的矩阵提供给concatenate()函数,如下所示:

 import numpy as np

#create twoNumPy matrices
mat1 = np. matrix ([[3, 5], [5, 7]])
mat2 = np. matrix ([[2, 4], [1, 8]])

#attempt to concatenate both matrices
n.p. concatenate ((mat1, mat2))

matrix([[3, 5],
        [5, 7],
        [2, 4],
        [1, 8]])

这次我们成功地连接了两个矩阵,没有任何错误。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注