计算两个一维数组的成对元素
Compute pairwise element of two 1D array
这是我的问题:
假设我的两个数组是:
import numpy as np
first = np.array(["hello", "hello", "hellllo"])
second = np.array(["hlo", "halo", "alle"])
现在我想得到两个数组的每个元素之间的距离矩阵
例如我的距离函数是:
def diff_len(string1, string2):
return abs(len(string1) - len(string2))
所以我想得到矩阵:
hello hello hellllo
hlo result1 result2 result3
halo result4 result5 result6
alle result7 result8 result9
所以我所做的是使用 Numpy 的向量化函数逐行计算:
vectorize_dist = np.vectorize(diff_len)
first = np.array(["hello", "hello", "hellllo"])
second = np.array(["hlo", "halo", "alle"])
vectorize_dist(first , "hlo")
vectorize_dist(first , "halo")
vectorize_dist(first , "alle")
matrix = np.array([vectorize_dist(first , "hlo"), vectorize_dist(first , "halo"), vectorize_dist(first , "alle")])
matrix
array([[2, 2, 4],
[1, 1, 3],
[1, 1, 3]])
但是为了得到我的矩阵,我需要执行一个循环来逐行计算,但我想立即得到矩阵。
事实上,我的两个数组可能非常大,执行循环可能会花费太多时间。
我还有多个距离要计算,所以我必须多次执行该过程,这会更耗时。
您可以使用 SciPy 的 cdist
:
import numpy as np
from scipy.spatial.distance import cdist
def diff_len(string1, string2):
return abs(len(string1) - len(string2))
first = np.array(["hello", "hello", "hellllo"])
second = np.array(["hlo", "halo", "alle"])
d = cdist(first[:, np.newaxis], second[:, np.newaxis], lambda a, b: diff_len(a[0], b[0]))
print(d.T)
# [[2. 2. 4.]
# [1. 1. 3.]
# [1. 1. 3.]]
请注意,您需要转换输出矩阵类型以使其成为整数。
这是我的问题:
假设我的两个数组是:
import numpy as np
first = np.array(["hello", "hello", "hellllo"])
second = np.array(["hlo", "halo", "alle"])
现在我想得到两个数组的每个元素之间的距离矩阵
例如我的距离函数是:
def diff_len(string1, string2):
return abs(len(string1) - len(string2))
所以我想得到矩阵:
hello hello hellllo
hlo result1 result2 result3
halo result4 result5 result6
alle result7 result8 result9
所以我所做的是使用 Numpy 的向量化函数逐行计算:
vectorize_dist = np.vectorize(diff_len)
first = np.array(["hello", "hello", "hellllo"])
second = np.array(["hlo", "halo", "alle"])
vectorize_dist(first , "hlo")
vectorize_dist(first , "halo")
vectorize_dist(first , "alle")
matrix = np.array([vectorize_dist(first , "hlo"), vectorize_dist(first , "halo"), vectorize_dist(first , "alle")])
matrix
array([[2, 2, 4],
[1, 1, 3],
[1, 1, 3]])
但是为了得到我的矩阵,我需要执行一个循环来逐行计算,但我想立即得到矩阵。 事实上,我的两个数组可能非常大,执行循环可能会花费太多时间。 我还有多个距离要计算,所以我必须多次执行该过程,这会更耗时。
您可以使用 SciPy 的 cdist
:
import numpy as np
from scipy.spatial.distance import cdist
def diff_len(string1, string2):
return abs(len(string1) - len(string2))
first = np.array(["hello", "hello", "hellllo"])
second = np.array(["hlo", "halo", "alle"])
d = cdist(first[:, np.newaxis], second[:, np.newaxis], lambda a, b: diff_len(a[0], b[0]))
print(d.T)
# [[2. 2. 4.]
# [1. 1. 3.]
# [1. 1. 3.]]
请注意,您需要转换输出矩阵类型以使其成为整数。