【问题标题】:Optimize counting in an array优化数组中的计数
【发布时间】:2013-07-16 00:31:18
【问题描述】:

我认为我的代码可以做得更好......

我想要什么:

array a = ([1,2,3],[4,5,6],[7,8,9])
array b = ([2,3,4],[2,2,2])

a[0] to b[0] and b[1] 的欧几里得距离,然后是该距离的最小值,以此类推,其他值...

结果应该是这样的

result = ([1,2]) 

我觉得我做的方式有点复杂:

result = [0]*len(b)
for i in a:
    c = 0
    minimum = euclid(a[0],b[0])
    place = 0
    for j in b:
        c=c+1
    if (minimum > euclid(i,j)):
          minimum = euclid(i,j)
          place = c 
    result[place-1] = result[place-1]+1

好吧,我试着更好地解释它。我有两个数组 A 和 B 数组 A 有 3 个值(值 [1,2,3])现在我想用 B 的所有值计算 A 的所有值的欧几里德距离并计算 B 的频率[0] 或 B[1] 是最小值。

所以我开始编写代码手册: 起初我用 b[0] 计算 a[0] 并发现那是最小值,因为目前没有最小值。接下来我用 b[1] 计算 a[0] 并发现 euclidean(a[0],b[1])

【问题讨论】:

  • 请为您的问题写一个更好的标题,“或其他”,然后笑脸不是一个好标题。
  • “以此类推,其他值”。这是否意味着您还想要与a[1] to b[0] and b[1] 的欧几里得距离,以及与a[2] to b[0] and b[1] 的欧几里得距离,等等a 有多少元素?如果是这样,为什么result 只有两个元素?
  • 我想计算从 a[0] 到 b[0],b[1] 的欧式距离并计算最小值。例如 1.round a[0] - b[0],b[1], c[0,0] if minimum = b[0] -> c[1,0] 2.round a[1] - b[ 0],b[1], c[1,0] 如果最小值 = b[1] -> c[1,1] 3.round a[2] - b[0],b[1], c[1 ,1] 如果最小值 = b[2] -> c[1,2]
  • 对不起,我不明白。您是指“事件的一个阶段”中的舍入,还是“将数字近似为最接近的整数”? c[0,0] 是什么意思?在您的代码中, c 是一个整数,不能以这种方式进行索引。 -> 运算符是什么意思?

标签: python arrays max counting minimum


【解决方案1】:

我相信你的意思是你有两个点列表 - ab。对于a 中的每个点,为b 中最接近的点(最小欧几里得距离)增加一个计数器。对吗?

我将如何实现这一目标:

results = [0] * len(b)
for p_a in a:
    dists = [euclid(p_a, p_b) for p_b in b]
    min_index = dists.index(min(dists))
    results[min_index] += 1

【讨论】:

  • 你明白了!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多