TypeError:只有一个元素的整数数组可以转换为索引 3

Posted

技术标签:

【中文标题】TypeError:只有一个元素的整数数组可以转换为索引 3【英文标题】:TypeError: only integer arrays with one element can be converted to an index 3 【发布时间】:2016-01-13 15:30:07 【问题描述】:

我在标题中有这个错误,不知道出了什么问题。当我使用 np.hstack 而不是 np.append 时它可以工作,但我想让它更快,所以使用 append。

time_list 浮点数列表

heights 是一维 np.array 浮点数

j = 0
n = 30
time_interval = 1200
axe_x = []

while j < np.size(time_list,0)-time_interval:
    if (not np.isnan(heights[j])) and (not np.isnan(heights[j+time_interval])):
        axe_x.append(time_list[np.arange(j+n,j+(time_interval-n))])

 File "....", line .., in <module>
    axe_x.append(time_list[np.arange(j+n,j+(time_interval-n))])

TypeError: only integer arrays with one element can be converted to an index

【问题讨论】:

你想用axe_x.append() 达到什么目的?你能展示你的输入和输出吗? 索引列表不如数组强大。它们只接受切片和整数。 axe_x 应该是从 time_list 列表生成的一维浮点数组 您能否在您的问题中包含示例,例如 input list 。输出数组。 【参考方案1】:

问题正如错误所示,time_list 是一个普通的 python 列表,因此您不能使用另一个列表对其进行索引(除非另一个列表是具有单个元素的数组)。示例 -

In [136]: time_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]

In [137]: time_list[np.arange(5,6)]
Out[137]: 6

In [138]: time_list[np.arange(5,7)]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-138-ea5b650a8877> in <module>()
----> 1 time_list[np.arange(5,7)]

TypeError: only integer arrays with one element can be converted to an index

如果您想进行这种索引,您需要将time_list 设为numpy.array。示例 -

In [141]: time_list = np.array(time_list)

In [142]: time_list[np.arange(5,6)]
Out[142]: array([6])

In [143]: time_list[np.arange(5,7)]
Out[143]: array([6, 7])

要注意的另一件事是,在您的while 循环中,您永远不会增加j,因此它可能以无限循环结束,您还应该增加j 一定数量(也许time_interval? )。


但是根据你在cmets中发布的要求-

axe_x 应该是从 time_list 列表生成的一维浮点数组

您应该使用 .extend() 而不是 .append().append 将为您创建一个数组列表。但是如果需要一维数组,则需要使用.extend()。示例 -

time_list = np.array(time_list)
while j < np.size(time_list,0)-time_interval:
    if (not np.isnan(heights[j])) and (not np.isnan(heights[j+time_interval])):
        axe_x.extend(time_list[np.arange(j+n,j+(time_interval-n))])
        j += time_interval           #Or what you want to increase it by.

【讨论】:

不起作用,我与extend 有相同的错误:axe_x.extend(time_list[np.arange(j,j+(time_interval))]) TypeError: only integer arrays can be转换为索引 就像我说的你需要将 time_list 转换为 numpy 数组。这样做。

以上是关于TypeError:只有一个元素的整数数组可以转换为索引 3的主要内容,如果未能解决你的问题,请参考以下文章

Python TypeError:只有整数标量数组可以转换为标量索引

pandas.DataFrame.fillna - TypeError:只有整数标量数组可以转换为标量索引

numpy array TypeError:只有整数标量数组可以转换为标量索引

在 KNeighborsClassifier 中使用自定义指标时,我不断收到“TypeError:只有整数标量数组可以转换为标量索引”

线程 Thread-5 中的异常:TypeError:只能将整数标量数组转换为标量索引

将浮点数与数组中的值进行比较时,“TypeError:只能将整数标量数组转换为标量索引”