首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy -柱间平均距离

Numpy -柱间平均距离
EN

Stack Overflow用户
提问于 2017-10-26 21:56:24
回答 2查看 616关注 0票数 1

我有一个2D数组,我想要计算每一列之间的平均距离,同时考虑到每一行.

例如,如果我有2D数组:

代码语言:javascript
运行
复制
2  2  3
4  2  5
1  5  2

我希望计算列1和2之间跨越所有行、1和3跨所有行、2和3跨所有行之间的平均距离。

跨列1和列2的平均距离是( |2-2| + |4-2| + |1-5| ) / 3,它等于2。

有能实现这一目标的numpy函数吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-26 22:05:08

像这样吗?

代码语言:javascript
运行
复制
import numpy as np
x = np.array([[2,2,3],[4,2,5],[1,5,2]])

def calc(cols):
    return np.mean(np.abs(np.diff(x[:, cols])))

print(calc([0,1]))

退出:

代码语言:javascript
运行
复制
2.0

还应考虑:

代码语言:javascript
运行
复制
import itertools
print(list(itertools.combinations(range(x.shape[1]), 2)))  # outer list because using py3

退出:

代码语言:javascript
运行
复制
[(0, 1), (0, 2), (1, 2)]
票数 3
EN

Stack Overflow用户

发布于 2017-10-27 06:59:33

我建议这样做:

代码语言:javascript
运行
复制
from scipy.spatial.distance import pdist
m, n = in_arr.shape
pdist(in_arr.T, 'cityblock') / m

Out: array([ 2.        ,  1.        ,  2.33333333])

如果您想知道哪个距离与哪一对相关,请使用:

代码语言:javascript
运行
复制
np.stack(np.triu_indices(n, 1))  

Out: 
array([[0, 0, 1],
       [1, 2, 2]], dtype=int32)

这应该比使用for循环或itertools快得多。

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

https://stackoverflow.com/questions/46964459

复制
相关文章

相似问题

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