如何修复:只有整数标量数组可以转换为标量索引
使用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:操作数无法与形状一起广播