我有一个data
多维数组,最后一个是距离。另一方面,我有距离向量r
。例如:
Data = np.ones((20, 30, 100))
r = np.linspace(10, 50, 100)
最后,我还有一个临界距离值列表,称为r0
,使得(r0.shape == Data.shape[:-1]).all()
。例如,
r0 = np.random.random((20, 30))*40 + 10
我希望根据以下条件将 Data 的值替换为零r
and r0
对应于第一个维度Data
。例如,我想要任何i
and j
that:
Data[i, j, r>=r0[i,j]] = 0
考虑一下Data
可以是一个大数组,这样使用循环就会很长。我当前的解决方法是:
r_temp = np.broadcast_to(np.expand_dims(r, list(np.arange(len(Data.shape)-1))), Data.shape)
Data[r_temp >= r0[..., None]] = 0
它很快,但考虑到我必须存储数组,它消耗了大量内存r_temp
,如果Data
开始变大。
任何不需要创建和存储的解决方案r_temp
?
注:用于创建r_temp
, see .