【问题标题】:Removing indexes to match array dimensions删除索引以匹配数组维度
【发布时间】:2021-04-14 03:25:01
【问题描述】:

我有两个具有不同值的数组 (x, y),我试图为 x

例如,它们都是 24、36,但在过滤数组之后,y 是 22、32,x 仍然是 24、36。如何删除相同的索引?假设我删除了索引 4、7 和 9、14。如何删除数组 x 中完全相同的索引?

如果需要,我的代码。 data_mg 是 y,data_dg 是 x。

data_mg = image_data_mg[0].data[0:x, 0:y].astype('float')
data_err = image_data_err[0].data[0:x, 0:y].astype('float')
data_dg = image_data_dg[0].data[0:x, 0:y].astype('float')

data_mg[data_mg == 0] = np.nan
data_err[data_err == 0] = np.nan
data_dg[data_dg == 0] = np.nan
data_mg = data_mg[data_mg/data_err > 2]
data_dg = np.ndarray.flatten(data_dg)
data_dg = data_dg[data_mg]

data_mg = np.ndarray.flatten(data_mg)
data_mg = data_mg[np.logical_not(np.isnan(data_mg))]
data_dg = np.ndarray.flatten(data_dg)
data_dg = data_dg[np.logical_not(np.isnan(data_dg))]

b = np.where(np.array(data_dg > 100))
median = np.median(data_mg[b])
print('Flux median at dispersion > 100 km/s is ' + str(median))
a = np.where(data_dg <= 100)
median1 = np.median(data_mg[a])
print('Flux median at dispersion <= 100 km/s is ' + str(median1))

IndexError: arrays used as indices must be of integer (or boolean) type, line 10

【问题讨论】:

    标签: python arrays pandas numpy astropy


    【解决方案1】:

    看起来 data_mgdata_dg 以相同的形状开头,并且您使用布尔索引来保留每个中不为 na 的值。问题是每个数组中不同的值是 nan 。我建议创建一个可用于两个数组的组合索引。

    data_mg = np.ndarray.flatten(data_mg)
    data_dg = np.ndarray.flatten(data_dg)
    
    ix_mg = np.logical_not(np.isnan(data_mg))
    ix_dg = np.logical_not(np.isnan(data_dg))
    ix_combined = np.logical_and(ix_mg, ix_dg)
    
    data_mg = data_mg[ix_combined]
    data_dg = data_dg[ix_combined]
    

    【讨论】:

    • 这是否使得当我从数组 x 中删除某些 indecies 时,它也会从数组 y 中删除它们?我在 3 个月前开始使用 python,到目前为止我只是自学。
    • 我想我可以用艰难的方式来做 np.where 来定位数组中符合我要求的元素的缺陷?还是我离得很远
    • “我想我可以用艰难的方式来做,然后用 np.where 来定位数组中符合我要求的元素的缺陷”我不会称之为“艰难的方式”。我称之为“方式”。 np.where 将为您提供与某些条件匹配的数组中的索引,并且您可以使用这些相同的索引来索引您的其他数组,只要它的大小相同或更大。
    【解决方案2】:

    首先,您可以对每个数组执行相同的索引操作,以便它们具有相同的形状。我相信这看起来像这样:

    idx = data_mg / data_err > 2
    data_mg = data_mg[idx]
    data_df = data_dg[idx)
    

    但是你得到的错误可能不是由于这个。看起来您的错误来自以下行:

    data_dg = data_dg[data_mg]
    

    给出错误:

    IndexError: arrays used as indices must be of integer (or boolean) type, line 10
    

    我不确定您的意图是什么,所以我不确定要推荐什么。如果这是您试图让它们具有相同的形状,那么我上面包含的线条应该可以为您做到这一点。

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 2017-12-25
      • 2021-11-07
      • 1970-01-01
      • 2013-03-14
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多