python长格式_在python中将距离平方转换为长格式

助手函数-

import numpy as np

import functools

# https://stackoverflow.com/a/46135435/ by @unutbu

def indices_merged_arr_generic_using_cp(arr):

"""

Based on cartesian_product

http://stackoverflow.com/a/11146645/190597 (senderle)

"""

shape = arr.shape

arrays = [np.arange(s, dtype='int') for s in shape]

broadcastable = np.ix_(*arrays)

broadcasted = np.broadcast_arrays(*broadcastable)

rows, cols = functools.reduce(np.multiply, broadcasted[0].shape), len(broadcasted)+1

out = np.empty(rows * cols, dtype=arr.dtype)

start, end = 0, rows

for a in broadcasted:

out[start:end] = a.reshape(-1)

start, end = end, end + rows

out[start:] = arr.flatten()

return out.reshape(cols, rows).T

使用-

In [169]: out = indices_merged_arr_generic_using_cp(distance_matrix)

In [170]: np.savetxt('out.txt', out, fmt="%i,%i,%f")

In [171]: !cat out.txt

0,0,0.000000

0,1,1.414214

0,2,4.242641

1,0,1.414214

1,1,0.000000

1,2,2.828427

2,0,4.242641

2,1,2.828427

2,2,0.000000

得到

distance_matrix

我们也可以使用

Scipy's cdist

:

cdist(points, points)

. 还有

eucl_dist

包(免责声明:我是它的作者),它包含各种计算欧几里得距离的方法,这些方法比

SciPy's cdist

尤其是对于大型阵列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值