详解错误---IndexError: too many indices for array

问题来源:参照一个网上案例

问题

这段代码是有效的:

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
>>> a[: , 2]
array([ 3,  7, 11])

这段代码是无效的会报错:“IndexError: too many indices for array”

>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
>>> a[:,2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

解答

关于数组的结构
第一个数组的形状为(3,4),第二个数组的形状为(3,)。第二个数组缺少第二个维度。np.array无法使用此输入来构造矩阵(或长度类似的数组)。它只能创建一个列表数组。


>>> a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

>>> print(a)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

>>> print(type(a))
<class 'numpy.ndarray'>


>>> b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])

>>> print(b)
[list([1, 2, 3, 4]) list([5, 6, 7, 8]) list([9, 10, 11])]

>>> print(type(b))
<class 'numpy.ndarray'>

关于np.ndarray的解答
Numpy ndarray表示所有元素都具有相同的长度。在这种情况下,有数组不包含相同长度的列表,因此它最终是列表的一维数组,而不是“适当的”二维数组。问题源处在【9,10,11】这个数组缺失的一个数值导致维度不准确。

ndarray是具有相同类型和大小的项目的(通常为固定大小)多维容器。

做如下验证:

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
a.shape # (3,4)
a.ndim # 2

b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11]])
b.shape # (3,)
b.ndim # 1
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值