首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中找到距离度量

如何在python中找到距离度量
EN

Stack Overflow用户
提问于 2021-01-30 17:08:24
回答 2查看 159关注 0票数 4

这是数组。

代码语言:javascript
运行
复制
arr=[1,2,2,1,5,1]

如果是相同的值,我需要计算in和所有其他元素之间索引差异的abs值,如下所示。

代码语言:javascript
运行
复制
distance metric for a[0] = |0-3|+|0-5|=8
distance metric for a[1] = |1-2|=1
distance metric for a[2] = |2-1|=1
distance metric for a[3] = |3-0|+|3-5|=5
distance metric for a[4] = 0
distance metric for a[5] = |5-0|+|5-3|=7

输出是

代码语言:javascript
运行
复制
[8,1,1,5,0,7]

有人能帮我在python中编写这个代码吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-30 17:20:02

您可以使用以下工作示例:

代码语言:javascript
运行
复制
arr=[1,2,2,1,5,1]
res = []
for i, n in enumerate(arr):
    val = 0
    occur = [j for j, x in enumerate(arr) if x == n and j != i]
    for o in occur:
        val += abs(i-o)
    res.append(val)
print(res)

8,1,1,5,0,7

更有效的版本,复杂度为O(n**2)

代码语言:javascript
运行
复制
arr=[1,2,2,1,5,1]
res = []
for i, n in enumerate(arr):
    val = 0
    for j, x in enumerate(arr):
        if x == n and j != i:
            val += abs(i-j)
    res.append(val)
print(res)
票数 6
EN

Stack Overflow用户

发布于 2021-01-30 17:25:49

使用列表理解和避免中间变量

代码语言:javascript
运行
复制
arr = [1, 2, 2, 1, 5, 1]

output = []
for index in range(len(arr)):
    output.append(sum(abs(index - k) if arr[k] == arr[index] else 0 for k in range(len(arr))))

print(output)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65970799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档