删除索引以匹配数组维度

2024-05-21 04:49:30 发布

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

我有两个具有不同值的数组(x,y),我正在尝试为x<;100我的问题是我过滤掉了数组x中的一些值,因此数组的形状不同。是否有一种方法可以删除我在数组x中的数组y中删除的索引

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

我的代码,如果需要的话。数据_mg为y,数据_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

Tags: 数据imagedatanp数组nanfloatmedian
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

我不知道你的意图是什么,所以我不知道该推荐什么。如果这是你试图让他们成为相同的形状,我上面包括的线应该为你做到这一点

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

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]

相关问题 更多 >