我的目标是首先过滤掉射电通量中的所有0.值以及赤经(RA)和距离(依赖于红移/z)中的相应(相同索引)数据,然后将这些数组分为两组, radio 大声(radioflux > 1)和 radio 安静(radioflux <= 1)。该代码工作正常,直到我尝试从 RA 和距离数组中删除 radio 安静类星体索引以获取剩余的 radio 响亮类星体索引,反之亦然以获得 radio 安静类星体索引。这些是当我检查数组中有多少个值时得到的值:
- radio 通量:166583
- radio 剪辑:12464
- 广播音量:239
- radio 静音:12225
- 距离缩短:12464
- 角度切割:12464
- 距离响度:12120
- 安静距离:12424
- 角度大声:12120
- 角度安静:12424
应该是:
- radio 通量:166583
- radio 剪辑:12464
- 广播音量:239
- radio 静音:12225
- 距离缩短:12464
- 角度切割:12464
- 距离响度:239
- 安静距离:12225
- 角度响度:239
- 安静角度:12225
我的代码片段:(所有使用的变量/数组名称之前已定义)
values = radioflux
searchval = 0
searchvalquietloud = 1
indices = np.where(values == searchval)[0]
radiocut = np.delete(radioflux,indices)
quiet = np.where(values <= searchvalquietloud)[0]
radioloud = np.delete(radiocut,quiet)
loud = np.where(values > searchvalquietloud)[0]
radioquiet = np.delete(radiocut,loud)
distance = np.multiply(redshift,dist)
angle = np.multiply(ra,radians)
distancecut = np.delete(distance,indices)
anglecut = np.delete(angle,indices)
distancequiet = np.delete(distancecut,radioloud)
distanceloud = np.delete(distancecut,radioquiet)
anglequiet = np.delete(anglecut,radioloud)
angleloud = np.delete(anglecut,radioquiet)
最佳答案
发布的代码中有几个大错误:
您使用
np.where
查找原始radiolux
数组上的索引,然后使用这些索引从radiocut
中删除元素>,这是radioflux
的过滤版本。您没有收到IndexError
的事实表明这是一个转录错误,但您可能需要仔细检查。过滤
distancecut
和anglecut
数组时,您没有使用loud
和quiet
数组,保存索引,而radioloud
和radioquiet
保存 radio 通量值。
除此之外,使用 numpy 执行此操作的规范方法是使用 bool 索引,并且看起来像这样:
cut_mask = values != searchval
radiocut = radioflux[cut_mask]
loud_mask = radiocut > searchvalquietloud
quiet_mask = ~loud_mask
radioloud = radiocut[loud_mask]
radioquiet = radiocut[quiet_mask]
然后您将按照以下方式处理其他两个数组:
distancecut = distance[cut_mask]
distanceloud = distancecut[loud_mask]
distancequiet = distancecut[quiet_mask]
对于角度
也类似。
关于python - 如何使用 numpy.delete 过滤项目? (为某些人工作,但不为其他人工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196725/