ValueError:n = 600数组(浮点数)的布尔索引太多

时间:2014-11-06 11:35:26

标签: python arrays numpy boolean

我正在尝试运行(在Python上):

#Loading in the text file in need of analysis
x,y=loadtxt('2.8k to 293k 15102014_rerun 47_0K.txt',skiprows=1,unpack=True,dtype=float,delimiter=",")

C=-1.0      #Need to flip my voltage axis

yone=C*y    #Actually flipping the array

plot(x,yone)#Test

origin=600.0#Where is the origin? i.e V=0, taking the 0 to 1V elements of array

xorg=x[origin:1201]# Array from the origin to the final point (n)

xfit=xorg[(x>0.85)==True] # Taking the array from the origin and shortening it further to get relevant area

它返回ValueError。我尝试使用更小的10个元素数组执行此过程,xfit=xorg[(x>0.85)==True]命令工作正常。该计划正在尝试做的是将视野,某些数据缩小到相关点,这样我就可以拟合一条最适合数据的线性元素。

我为格式混乱道歉,但这是我在本网站上提出的第一个问题,因为我无法搜索我能理解的错误。

3 个答案:

答案 0 :(得分:3)

这个答案适用于那些不了解numpy数组的人(比如我),感谢MrE指出numpy docs。

Numpy数组具有布尔掩码的这个很好的特性。

对于numpy数组,大多数运算符返回应用于每个元素的操作数组 - 而不是像普通Python列表中的单个结果:

>>> alist = range(10)
>>> alist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> alist > 5
True

>>> anarray = np.array(alist)
>>> anarray
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> anarray > 5
array([False, False, False, False, False, False,  True,  True,  True,  True], dtype=bool)

您可以使用bool数组作为numpy数组的索引,在这种情况下,您将获得相应bool数组元素为True的位置的过滤数组。

>>> mask = anarray > 5
>>> anarray[mask]
array([6, 7, 8, 9])

掩码不得大于数组:

>>> anotherarray = anarray[mask]
>>> anotherarray
array([6, 7, 8, 9])

>>> anotherarray[mask]
ValueError: too many boolean indices

所以你不能使用比你屏蔽的数组大的掩码:

>>> anotherarray[anarray > 7]
ValueError: too many boolean indices

>>> anotherarray[anotherarray > 7]
array([8, 9])

由于xorg小于x,因此基于x的模板将超过xorg,您将获得ValueError例外。

答案 1 :(得分:0)

更改

xfit=xorg[x>0.85]

xfit=xorg[xorg>0.85]

x大于xorg,因此x > 0.85的元素多于xorg

答案 2 :(得分:0)

尝试以下方法: 替换你的代码

xorg=x[origin:1201]
xfit=xorg[(x>0.85)==True]    

mask = x > 0.85
xfit = xorg[mask[origin:1201]]

当x是numpy.ndarray时,这会有效,否则您可能会遇到问题,因为高级索引将返回视图而不是副本,请参阅SciPy/NumPy documentation

我不确定你是否喜欢使用numpy,但在尝试拟合数据时,numpy / scipy无论如何都是一个不错的选择......