我正在尝试运行(在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]
命令工作正常。该计划正在尝试做的是将视野,某些数据缩小到相关点,这样我就可以拟合一条最适合数据的线性元素。
我为格式混乱道歉,但这是我在本网站上提出的第一个问题,因为我无法搜索我能理解的错误。
答案 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无论如何都是一个不错的选择......