Scipy 自动广播
Auto broadcasting in Scipy
我有两个 np.ndarray
,data
的形状为 (8000, 500)
和 sample
的形状为 (1, 500)
。
我想要实现的是测量 data
到 sample
中每一行之间的各种指标。
当使用 from sklearn.metrics.pairwise.cosine_distances
时,我能够利用 numpy
的广播执行以下行
x = cosine_distances(data, sample)
但是当我尝试对 scipy.spatial.distance.cosine
使用相同的过程时,我得到了错误
ValueError: Input vector should be 1-D.
我想这是一个广播问题,我正试图找到解决它的方法。
我的最终目标是遍历 scipy.spatial.distance
中所有可用的距离,这些距离可以接受两个向量并将它们应用于数据和样本。
如何在我的 scipy
版本的代码中复制 sklearn
中自动发生的广播?
好的,查看文档,http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_distances.html
使用 (800,500) 和 (1,500) 个输入 ((samples, features)
),您应该得到 (800,1) 个结果 ((samples1, samples2)
)。
我不会将其描述为广播。它更像是 dot
产品,对特征(500 形状)执行某种排序计算 (norm
),将其减少到一个值。它更像是 np.dot(data, sample.T)
在处理尺寸方面。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cosine.html 是 Computes the Cosine distance between 1-D arrays
,更像是
for row in data:
for s in sample:
d = cosine(row, s)
或者因为 sample
只有一行
distances = np.array([cosine(row, sample[0]) for row in data])
换句话说,sklearn
版本执行成对迭代(可能在编译代码中),而 spartial
仅评估一对的距离。
pairwise.cosine_similarity
确实
# K(X, Y) = <X, Y> / (||X||*||Y||)
K = safe_sparse_dot(X_normalized, Y_normalized.T, dense_output=dense_output)
这就是我之前提到的类似 dot
的行为,但添加了规范化。
我有两个 np.ndarray
,data
的形状为 (8000, 500)
和 sample
的形状为 (1, 500)
。
我想要实现的是测量 data
到 sample
中每一行之间的各种指标。
当使用 from sklearn.metrics.pairwise.cosine_distances
时,我能够利用 numpy
的广播执行以下行
x = cosine_distances(data, sample)
但是当我尝试对 scipy.spatial.distance.cosine
使用相同的过程时,我得到了错误
ValueError: Input vector should be 1-D.
我想这是一个广播问题,我正试图找到解决它的方法。
我的最终目标是遍历 scipy.spatial.distance
中所有可用的距离,这些距离可以接受两个向量并将它们应用于数据和样本。
如何在我的 scipy
版本的代码中复制 sklearn
中自动发生的广播?
好的,查看文档,http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_distances.html
使用 (800,500) 和 (1,500) 个输入 ((samples, features)
),您应该得到 (800,1) 个结果 ((samples1, samples2)
)。
我不会将其描述为广播。它更像是 dot
产品,对特征(500 形状)执行某种排序计算 (norm
),将其减少到一个值。它更像是 np.dot(data, sample.T)
在处理尺寸方面。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cosine.html 是 Computes the Cosine distance between 1-D arrays
,更像是
for row in data:
for s in sample:
d = cosine(row, s)
或者因为 sample
只有一行
distances = np.array([cosine(row, sample[0]) for row in data])
换句话说,sklearn
版本执行成对迭代(可能在编译代码中),而 spartial
仅评估一对的距离。
pairwise.cosine_similarity
确实
# K(X, Y) = <X, Y> / (||X||*||Y||)
K = safe_sparse_dot(X_normalized, Y_normalized.T, dense_output=dense_output)
这就是我之前提到的类似 dot
的行为,但添加了规范化。