在Python中:给定一个原始的数字数组,我如何创建一个包含特定范围内原始数组值的新数组?

时间:2012-10-15 18:13:47

标签: python arrays numpy slice

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()

在这种情况下,我不确定如何在我的代码中正确使用这两个函数中的任何一个,而无需创建循环或定义新函数;我认为可能有一种更简单的方法来完成同样的事情。

2 个答案:

答案 0 :(得分:6)

>>> import numpy as np
>>> a = np.arange(10)
>>> a[(a > 2) & (a < 8)]
array([3, 4, 5, 6, 7])

每个条件(a > 2a < 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)))]

这对你有用吗?我希望我能正确理解你的代码。