Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy-列之间的平均距离_Python_Numpy - Fatal编程技术网

Python Numpy-列之间的平均距离

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

我有一个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 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来准备所有组合。