【发布时间】:2018-05-09 21:47:33
【问题描述】:
我有一个矩阵和矩阵中每一行的质心向量。我想将矩阵中的每个元素与向量中的每个元素进行比较,并找出质心向量中的哪个元素最接近矩阵中的数据点。有没有办法在不使用循环的情况下做到这一点?我将使用大量数据并希望它尽可能快
这是一个非常简单的python示例,说明我现在的做法:
import scipy as sp
test_array = sp.array([(1,1,1),(3,4,5),(6,12,18)])
sumx = test_array.sum(axis=1)
centroid_vector = sumx / len(test[0])
for i in centroid_vector:
x = abs(test_array - i)
minimum = sp.argmin(x)
所需的结果是具有最小距离、原始值(来自 test_array)和距离最小的质心向量中元素的索引的矩阵。在这种情况下,它看起来像这样:
[(0, 1, 1),
(0, 1, 1),
(0, 1, 1),
(1, 3, 2),
(0, 4, 2),
...
(6, 18, 3)]
【问题讨论】:
-
test是一个 Numpy ndarray 吗? -
您希望一个最小值(在所有矩阵'值和所有向量'值之间)还是三个最小值(
centroid_vector的每个 i 一个最小值)? -
请为您的示例发布所需的结果。
-
np.unravel_index(np.argmin(np.abs(np.subtract.outer(test.mean(axis=1), test.ravel())), axis=1), test.shape)为质心的每个分量提供test中最接近值的坐标。输出:(array([0, 1, 2]), array([0, 1, 1]))。这些是左上角,中心和底部中心, -
@wwii,是的,它是一个 numpy 数组,导入了 scipy