Python编写曼哈顿距离代码
时间: 2024-05-13 11:11:24 浏览: 99
曼哈顿距离是指在网格状的坐标系上两点之间的距离,也被称为街区距离或者城市街区距离。Python编写曼哈顿距离代码可以使用以下代码:
```python
def manhattan_distance(x1, y1, x2, y2):
return abs(x1 - y2)
```
其中,x1和y1是第一个点的坐标,x2和y2是第二个点的坐标。函数返回这两个点之间的曼哈顿距离。
相关问题
使用Python编写一个能计算样本间欧式距离与曼哈顿距离的方法。
下面是Python代码实现:
```python
import numpy as np
def euclidean_distance(x1, x2):
"""
计算两个样本之间的欧式距离
:param x1: 样本1,类型为numpy数组
:param x2: 样本2,类型为numpy数组
:return: 欧式距离,类型为float
"""
return np.sqrt(np.sum(np.power(x1 - x2, 2)))
def manhattan_distance(x1, x2):
"""
计算两个样本之间的曼哈顿距离
:param x1: 样本1,类型为numpy数组
:param x2: 样本2,类型为numpy数组
:return: 曼哈顿距离,类型为float
"""
return np.sum(np.absolute(x1 - x2))
```
使用示例:
```python
# 计算欧式距离
x1 = np.array([1, 2, 3])
x2 = np.array([4, 5, 6])
print("欧式距离:", euclidean_distance(x1, x2))
# 计算曼哈顿距离
x1 = np.array([1, 2, 3])
x2 = np.array([4, 5, 6])
print("曼哈顿距离:", manhattan_distance(x1, x2))
```
输出结果:
```
欧式距离: 5.196152422706632
曼哈顿距离: 9
```
在UCI数据集中随机选择一个数据集,然后绘制柱状图,编写曼哈顿距离和余弦相似度,给出此实验代码
在Python中,我们可以使用pandas库加载UCI数据集(例如iris、波士顿房价等),matplotlib库用于绘制柱状图,sklearn库里的manhatten_distances和cosine_similarity函数计算曼哈顿距离和余弦相似度。下面是一个简单的示例,我们将以UCI的鸢尾花(Iris)数据集为例:
首先安装所需的库(如果尚未安装):
```bash
pip install pandas scikit-learn matplotlib seaborn
```
然后,我们导入必要的模块并加载数据:
```python
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import manhattan_distance, cosine_similarity
# 加载鸢尾花数据集
iris = load_iris()
data = pd.DataFrame(iris.data, columns=iris.feature_names)
```
接下来,我们准备绘制柱状图。这里以花瓣长度和宽度为例,展示各品种的分布:
```python
# 划分数据和标签
features = ['petal length (cm)', 'petal width (cm)']
X = data[features]
y = iris.target
# 绘制柱状图
plt.figure(figsize=(8,6))
for i, species in enumerate(np.unique(y)):
sub_df = X[y == species]
plt.bar(sub_df.index, sub_df.values[:,0], label=f'Species {species}', alpha=0.7)
plt.bar(sub_df.index, sub_df.values[:,1], bottom=sub_df.values[:,0], color='tab:orange')
plt.xlabel('Sample Index')
plt.ylabel('Petal Size (cm)')
plt.legend()
plt.show()
```
计算样本间的曼哈顿距离和余弦相似度:
```python
# 对于所有样本对
sample_pairs = list(zip(X.index, X.index))
distances = []
similarities = []
# 计算曼哈顿距离和余弦相似度
for pair in sample_pairs:
dist = manhattan_distance(X.loc[pair[0]], X.loc[pair[1]])
sim = cosine_similarity(X.loc[pair[0]].reshape(1, -1), X.loc[pair[1]].reshape(1, -1))[0][0]
distances.append(dist)
similarities.append(sim)
print(f"Manhattan Distances: {distances}")
print(f"Cosine Similarities: {similarities}")
```
这将显示每个样本对之间的曼哈顿距离和余弦相似度。注意实际运行时,你需要根据UCI数据集的实际结构调整上述代码。
阅读全文