尝试计算 numpy 数组列中的唯一项时出现“IndexError:数组索引过多”
Posted
技术标签:
【中文标题】尝试计算 numpy 数组列中的唯一项时出现“IndexError:数组索引过多”【英文标题】:"IndexError: too many indices for array" when trying to count unique items in numpy array column 【发布时间】:2021-02-05 17:30:06 【问题描述】:我有一个名为 data
的 numpy 数组,它有 8 列,并在行中进行递归操作,因此每次通过我需要应用的函数时,它的行数都是可变的。
在该函数中,我有以下代码行,它应该计算出现在数组最后一列中的每个唯一值的出现次数,无论我的数组当时有多少行:
labels, counts = np.unique(data[:,-1], return_counts=True)
这行代码返回一个IndexError: too many indices for array
,我认为这与我对列的切片方式有关,但我不知道如何修复它。我一直在谷歌搜索和编辑,但我尝试过的似乎都没有解决它。帮助将不胜感激。谢谢。
【问题讨论】:
在运行时打印data.shape
并检查data
的形状可能很有用。
【参考方案1】:
你有没有混合数据类型的结构化数组?我可以使用带有一个的索引方法生成该错误的唯一方法。例如
a = np.arange(0, 8*5).reshape(5, 8)
a
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39]])
a[:,-1] # as a check... array([ 7, 15, 23, 31, 39])
np.unique(a[:, -1], return_counts=True) # works as designed
(array([ 7, 15, 23, 31, 39]), array([1, 1, 1, 1, 1], dtype=int64))
# ---- a quick way to convert from uniform dtype to structured array
from numpy.lib.recfunctions import unstructured_to_structured as uts
b = uts(a)
b
array([( 0, 1, 2, 3, 4, 5, 6, 7), ( 8, 9, 10, 11, 12, 13, 14, 15),
(16, 17, 18, 19, 20, 21, 22, 23), (24, 25, 26, 27, 28, 29, 30, 31),
(32, 33, 34, 35, 36, 37, 38, 39)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'),
('f4', '<i4'), ('f5', '<i4'), ('f6', '<i4'), ('f7', '<i4')])
# ---- you can slice a structured array, you have to access it through it field
np.unique(b[:, -1], return_counts=True)
Traceback (most recent call last):
File "<ipython-input-8-51ab6cec2618>", line 1, in <module>
np.unique(b[:, -1], return_counts=True)
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
# ---- to fix it, access the last field by its name
np.unique(b['f7'], return_counts=True)
(array([ 7, 15, 23, 31, 39]), array([1, 1, 1, 1, 1], dtype=int64))
【讨论】:
以上是关于尝试计算 numpy 数组列中的唯一项时出现“IndexError:数组索引过多”的主要内容,如果未能解决你的问题,请参考以下文章
创建非常大的numpy数组时出现MemoryError [重复]
Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError
生成 numpy.MultivariateNormal 时出现 MemoryError