如何使用numpy.delete过滤项目? (为一些人而不是其他人工作)

时间:2014-06-13 02:17:26

标签: python numpy indices

我的目标是首先滤除无线电通量中的所有0值和右上升(RA)和距离(依赖于红移/ z)中的相应(相同指数)数据,然后将这些数组分成两组,无线电广播(radioflux> 1)和无线电安静(radioflux< = 1)。代码工作正常,直到我尝试从RA和距离数组中删除无线电静音类星体索引以获得剩余的无线电响亮的声音,反之亦然,以获得无线电安静的。这些是我在检查数组中有多少值时得到的值:

  • Radio Flux:166583
  • Radio Cut:12464
  • Radio Loud:239
  • Radio Quiet:12225
  • 距离切割:12464
  • 角度切割:12464
  • 距离响亮:12120
  • 距离安静:12424
  • Angle Loud:12120
  • 安静角度:12424

应该是:

  • Radio Flux:166583
  • Radio Cut:12464
  • Radio Loud:239
  • Radio Quiet:12225
  • 距离切割:12464
  • 角度切割:12464
  • 距离响亮:239
  • 距离安静:12225
  • Angle Loud: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)

1 个答案:

答案 0 :(得分:2)

发布的代码中有几个大错:

  1. 使用np.where查找原始radioflux数组的索引,然后使用这些索引从radiocut中删除元素,radioflux是{{1}的过滤版本}}。事实上你没有得到IndexError指出这是一个转录错误,但你可能想要仔细检查。

  2. 过滤distancecutanglecut数组时,您没有使用包含索引的loudquiet数组,但{{1} }和radioloud,它们保存无线电通量值。

  3. 除此之外,使用numpy执行此操作的规范方法是使用布尔索引,并且看起来像这样:

    radioquiet

    然后您将处理其他两个数组:

    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]