JAVA中获取阵列长度的方法,更有效的计算Numpy阵列之间距离的方法?

我拥有:3D框内不同位置的预定义圆和粒子(带有x-y-z坐标中的id和位置) .

我想做的事情:找出每个圆圈的某个半径范围内的所有粒子,并记录它们的ID .

我一直在做的事情:我正在使用distance.cdist()函数来计算所有粒子的x轴位置和圆圈的每个中心之间的欧氏距离 . 这是通过循环所有中心并将所有粒子和每个中心之间的距离存储在不同列中来完成的 .

我的代码是:

p_h_dx = np.empty((len(p),len(dsel))) #I create an empty array

for i in range(len(dsel)): #looping over all centers

distance = distance.cdist(np.column_stack((p[:,1],p_zeros)),np.column_stack((dsel[:,2][i],0)),'euclidean')

p_h_dx[:,i] = distance.reshape((len(p),))[:]

然后我重复它为y轴和z轴 . 最后,我用以下方式计算距离:

###############################################

p_h_dx an array storing the distances between the x-axis positions of all

particles and centers of the circles;

p_h_dy for y-axis and p_h_dz for z-axis

###############################################

p_h_d = np.sqrt(np.power(p_h_dx,2) + np.power(p_h_dy,2) + np.power(p_h_dz,2))

我有超过1亿个粒子和〜3万个圆圈,所以用我目前的方法,即使用mpi也需要大约1个星期来实现我的目标 . 我想知道是否有办法更有效地完成这项工作 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值