Python Numpy-列之间的平均距离
我有一个2D数组,我想计算每一行中每一列之间的平均距离 例如,如果我有2D阵列:Python Numpy-列之间的平均距离,python,numpy,Python,Numpy,我有一个2D数组,我想计算每一行中每一列之间的平均距离 例如,如果我有2D阵列: 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函数可以实现这一点?类似的功能 import numpy as np x = np.array([[2,2,3],[4,2,5],[1,5,2]]) def c
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函数可以实现这一点?类似的功能
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]))
输出:
还应考虑:
import itertools
print(list(itertools.combinations(range(x.shape[1]), 2))) # outer list because using py3
输出:
像这样的
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]))
输出:
还应考虑:
import itertools
print(list(itertools.combinations(range(x.shape[1]), 2))) # outer list because using py3
输出:
我建议这样做:
from scipy.spatial.distance import pdist
m, n = in_arr.shape
pdist(in_arr.T, 'cityblock') / m
Out: array([ 2. , 1. , 2.33333333])
如果您想知道哪条距离与哪条线对有关,请使用:
np.stack(np.triu_indices(n, 1))
Out:
array([[0, 0, 1],
[1, 2, 2]], dtype=int32)
这应该比使用for循环或itertools快得多我建议这样做:
from scipy.spatial.distance import pdist
m, n = in_arr.shape
pdist(in_arr.T, 'cityblock') / m
Out: array([ 2. , 1. , 2.33333333])
如果您想知道哪条距离与哪条线对有关,请使用:
np.stack(np.triu_indices(n, 1))
Out:
array([[0, 0, 1],
[1, 2, 2]], dtype=int32)
这应该比使用for循环或itertools快得多是的,这就是我想要的!是否有一种方法可以为每种可能的列排列运行calc,而不是手动指定列?或者准备一个消除对称性的for循环,或者使用itertools来准备所有组合。是的,这就是我想要的!是否有一种方法可以为每种可能的列排列运行calc,而不是手动指定列?或者准备一个用于消除对称性的for循环,或者使用itertools来准备所有组合。