import os
import pyfits as ps
import lomb
import numpy as np
import matplotlib.pyplot as plt
hdulist = ps.open('filename')
tbdata = hdulist[1].data
PDCFlux = tbdata.field(7)
PDCFlux = PDCFlux[~np.isnan(PDCFlux)]
psd,freq = lomb.lomb(Timesec,PDCFlux)
logpsd = np.log10(psd)
logfreq = np.log10(freq)
#want an associated 'slope'.
'''PDC Slope'''
PDCFluxrange = PDCFlux.all[np.log10(4*(10**(-5)))<freq<np.log10(4*(10**(-7)))]
在最后一行中,我尝试创建一个新数组:PDCFluxrange
,其中包含PDCFlux
(频率)的数组freq
的值,位于:log10(4*(10**(-5)))
和log10(4*(10**(-7))
。
当我在Pylab中运行程序时,收到类似于Value Error: The truth value of an array with more than one element is ambiguous
的错误消息。使用a.any()
或a.all()
。
在这种情况下,我不确定如何在我的代码中正确使用这两个函数中的任何一个,而无需创建循环或定义新函数;我认为可能有一种更简单的方法来完成同样的事情。
答案 0 :(得分:6)
>>> import numpy as np
>>> a = np.arange(10)
>>> a[(a > 2) & (a < 8)]
array([3, 4, 5, 6, 7])
每个条件(a > 2
和a < 8
)都会创建一个布尔numpy数组,其长度等于a
,并且包含{{1}中每个位置的标准的真值。 1}}。
a
然后,您正在使用numpy.logical_and查找两个条件均为真的位置。
最后,您将结果数组用作boolean or "mask" index array,以仅检索原始数组中符合条件的元素。
我认为您获得 >>> a > 2
array([False, False, False, True, True, True, True, True, True, True], dtype=bool)
因为ValueError
有效(并且实际上只是调用a > 2
,所以a.__gt__(2)
这样的语句}首先调用2 < a < 8
,这对我来说会产生相同的cmp(2,a)
:
ValueError
答案 1 :(得分:0)
我想你想要
PDCFluxrange = [x for x in PDCFlux if x>np.log10(4*(10**(-5))) and x<np.log10(4*(10**(-7)))]
这对你有用吗?我希望我能正确理解你的代码。