【问题标题】:Calculating distance between two elements only in the array in python仅计算python数组中两个元素之间的距离
【发布时间】:2015-03-03 19:54:52
【问题描述】:

所以我有两个问题:首先,我尝试打印包含 1004 个元素的数组,但它只打印前 29 个元素,然后跳转到 974 继续打印。如何获得 1004 个元素的完整数组?

这是我的代码

paired_data = []
for x in data:
    closest, ignored = pairwise_distances_argmin_min(x, result)
    paired_data.append([x, result[closest]])
#print paired_data
S = pd.DataFrame(paired_data, columns=['x','center'])
print S
# distance
Y = pdist(S, 'euclidean')
print Y

我还想计算数组中每两个元素之间的距离。例如

0 [5, 4] [3, 2]

1 [22, -10] [78, 90]

我想为数组的所有其余部分计算 [5, 4] 和 [3, 2] 之间的距离(欧几里得),依此类推。

【问题讨论】:

标签: python arrays distance euclidean-distance


【解决方案1】:

#1 的另一种解决方案:

print(S.to_string())    # print the entire table

并获得距离

# assumes Python 3
from functools import partial

def dist(row, col1, col2):
    return sum((c2 - c1)**2 for c1,c2 in zip(row[col1], row[col2])) ** 0.5

# compose a function (name the columns it applies to)
s_dist = partial(dist, col1="x", col2="center")
# apply it
S["dist"] = S.apply(s_dist, axis=1)

【讨论】:

  • @Micheal:我认为它应该按原样工作,但我在这台机器上除了 3.4 之外没有任何东西可以测试。
  • 如果我想对这些距离中的每一个(1004 个距离值)进行平方(^2),然后在平方后将它们全部相加,我该怎么做?
  • @Micheal:它是一个 n 维欧几里得距离。如果你想要平方和,试试sq_sum = (S["dist"]**2).sum()
  • 那为什么要乘以** 0.5?
  • ** 是求幂,而不是乘法,所以x ** 0.5 是 x 的平方根。
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 2021-01-20
  • 2017-09-15
  • 2020-06-10
  • 1970-01-01
相关资源
最近更新 更多