所以它看起来像 datan 在这里引起了这个问题。你正在创建一个 numpy 来自其他arrrays列表的数组,但如果这些子数组的形状不兼容,则会得到一个数组列表,而不是多维数组。当你切片时假设它是一个多维数组,当它不是时,你就遇到了问题。
datan
numpy
import numpy as np a = np.array([1,2,3,4]) b = np.array([4,5,6]) data1 = np.array([a, b]) print(data1) ### [array([1, 2, 3, 4]) array([4, 5, 6])]
如果 a 和 b 是不兼容的形状(在这种情况下是不同长度的1d数组),结果将是一个数组列表,而不是一个多维数组。
a
b
print(data1[1,2]) ### IndexError: too many indices for array
因此,如果我们在两个轴上切片,则会出现错误。相反,我们必须索引以获取列表中的正确数组,然后再次切片。
print(data1[1][2]) ### 6
如果阵列形状兼容,那么 numpy 将所有内容连接成一个多维数组,然后您就可以沿两个轴进行索引。
c = np.array([1,2,3]) d = np.array([4,5,6]) data2 = np.array([c, d]) print(data2) ### [[1 2 3] ### [4 5 6]] print(data2[1,2]) ### 6
因此,要解决此问题,请更改索引的方式,或强制输入数组具有相同的形状(例如通过裁剪)。