python - (P, Q) 和 (R,) 之间的曼哈顿距离
问题描述
我正在研究曼哈顿距离。它适用于简单的 for 循环。但我试图避免这种 for 循环。
import numpy as np
import random
A = np.random.randint(5, size=(10, 5))
B = [1, 3, 5, 2, 4]
for i in range(10):
dist = sum(abs(A[i]-B))
print("Distances: ", dist)
还有比这更好的方法吗?例如使用高级索引..谢谢您的指导。
解决方案
纯的numpy
您可以在 numpy 中执行此操作:
>>> np.sum(np.abs(A-B), axis=1)
array([10, 6, 9, 9, 7, 7, 9, 8, 14, 8])
将此与循环的输出进行比较:
Distances: 10
Distances: 6
Distances: 9
Distances: 9
Distances: 7
Distances: 7
Distances: 9
Distances: 8
Distances: 14
Distances: 8
选择:scipy
如果你愿意,你也可以使用scipy
(虽然我个人更喜欢这种numpy
方法):
from scipy.spatial.distance import cdist
>>> cdist(A,np.array(B).reshape(1,-1), metric='cityblock')
array([[10.],
[ 6.],
[ 9.],
[ 9.],
[ 7.],
[ 7.],
[ 9.],
[ 8.],
[14.],
[ 8.]])
推荐阅读
- graphics - 为什么这个 vulkan 交换链渲染循环的单个深度缓冲区就足够了?
- javascript - 关于改进循环结构的建议
- wordpress - 在 Wordpress 中隐藏未登录用户的菜单项
- python - 在 Python 中找不到正确的正则表达式!我只需要过滤一次出现子模式的名称
- javascript - 如何汇总反应
- flutter - Flutter to Google Sheets - 如何自动添加提交日期?
- android - 看不到在 Xamarin.Android 应用程序中创建的文件
- java - java.lang.NoClassDefFoundError: io/restassured/path/json/mapper/factory/JsonbObjectMapperFactory
- next.js - 在 next.js api 路由中使用订阅的 Apollo 服务器:websockets 麻烦
- flutter - Flutter,Video_player - 音轨变化 - 如何?