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

2024-04-16 08:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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,它由log10(4*(10**(-5)))log10(4*(10**(-7))之间的PDCFlux组成。在

当我在Pylab中运行该程序时,我收到一条类似于:Value Error: The truth value of an array with more than one element is ambiguous的错误消息。使用a.any()或{}。在

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


Tags: 函数importanosasnppsfreq
2条回答

我想你想

PDCFluxrange = [x for x in PDCFlux if x>np.log10(4*(10**(-5))) and x<np.log10(4*(10**(-7)))]

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

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

每个条件(a > 2a < 8)都在创建一个长度等于a的布尔numpy数组,并且在a中的每个位置包含条件的真值。在

^{pr2}$

然后,使用numpy.logical_and来找到两个条件均为真的位置。在

最后,将生成的数组用作boolean or "mask" index array,仅从原始数组中检索满足条件的元素。在

我认为您得到的是ValueError,因为尽管a > 2是有效的(实际上只是调用a.__gt__(2),但是像{}这样的语句首先调用cmp(2,a),这对我来说是相同的ValueError

>>> a = np.arange(10)
>>> cmp(2,a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

相关问题 更多 >