NumPy 无法识别井阵列形状



>我有一个代码如下:

data = np.array([[[i, j], i * j] for i in range(10) for j in range(10)])
print(data)
x = np.array(data[:,0])
x1 = x[:,0]
x2 = x[:,1]
print(x)

顺便说一下,data正确地输出[[[0,0],0],[[0,1],0],[[0,2],0],...,[[9,9],81]]这是乘法表及其结果。

因此,data的第一列(即x(必须分为x1x2,分别是它的第一列和最后一列。我认为我做对了,但它引发了一个错误,说too many indices for array.我做错了什么?

data.dtype之所以object,是因为[[i,j],k]的元素不是同质的。 为您提供的解决方法:

data = np.array([(i, j, i * j) for i in range(10) for j in range(10)])
print(data)
x1 = data[:,:2]
x2 = data[:,2]

data.shape现在(100,3)data.dtype intx1x2你想要的。

由于列表长度的混合,这将生成一个对象数组:

In [97]: data = np.array([[[i, j], i * j] for i in range(3) for j in range(3)])
In [98]: data
Out[98]: 
array([[[0, 0], 0],
       [[0, 1], 0],
       [[0, 2], 0],
       [[1, 0], 0],
       [[1, 1], 1],
       [[1, 2], 2],
       [[2, 0], 0],
       [[2, 1], 2],
       [[2, 2], 4]], dtype=object)
In [99]: data.shape
Out[99]: (9, 2)

一列包含数字(但仍然是对象 dtype(,其他列表。 两者都有(9,(形状

In [100]: data[:,1]
Out[100]: array([0, 0, 0, 0, 1, 2, 0, 2, 4], dtype=object)
In [101]: data[:,0]
Out[101]: 
array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1],
       [2, 2]], dtype=object)

将该列转换为数字数组的最简单方法是通过 .tolist

In [104]: np.array(data[:,0].tolist())
Out[104]: 
array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2],
       [2, 0],
       [2, 1],
       [2, 2]])
In [105]: _.shape
Out[105]: (9, 2)

另一个答案中建议的[i, j, i * j]元素更容易使用。


生成此类"表"的结构化数组方法:

In [113]: dt='(2)int,int'
In [114]: data = np.array([([i, j], i * j) for i in range(3) for j in range(3)],
     ...: dtype=dt)
In [115]: data
Out[115]: 
array([([0, 0], 0), ([0, 1], 0), ([0, 2], 0), ([1, 0], 0), ([1, 1], 1),
       ([1, 2], 2), ([2, 0], 0), ([2, 1], 2), ([2, 2], 4)], 
      dtype=[('f0', '<i4', (2,)), ('f1', '<i4')])
In [116]: data['f0']
Out[116]: 
array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2],
       [2, 0],
       [2, 1],
       [2, 2]])
In [117]: data['f1']
Out[117]: array([0, 0, 0, 0, 1, 2, 0, 2, 4])

最新更新