在numpy距离对称矩阵中获取对角线正方形坐标

时间:2020-07-25 09:31:44

标签: python pandas numpy cosine-similarity distance-matrix

如何获取对角线上的大矩形的坐标。

例如黄色[0,615],[615,1438],[1438,1526]

import numpy as np; 
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

df = pd.DataFrame(array) # array is image numpy
df.shape #(1526, 360)
s = cosine_similarity(df) #(1526, 1526)
plt.matshow(s)

matrix cosine distance

我尝试在第一行获得峰值,但是有噪音信息

speak = 1-s[0]

peaks, _ = find_peaks(speak, distance=160, height=0.1)
print(peaks, len(peaks))
np.diff(peaks)

plt.plot(speak)
plt.plot(peaks, speak[peaks], "x")
plt.show()

one row histogram

更新,添加另一个示例 并上传到colab完整脚本https://colab.research.google.com/drive/1hyDIDs-QjLjD2mVIX4nNOXOcvCZY4O2c?usp=sharing

noise example example2

3 个答案:

答案 0 :(得分:1)

使用np.diag(df)获取对角线元素的列表。检查屏幕快照中的颜色是否超过或低于阈值,如果颜色代表低于/高于某个值(可能为零)。

答案 1 :(得分:1)

cosine_similarity的所有对角元素均相同。因此,您应该寻找附近值的变化。

您可以尝试以下方法:

factor = 1.01
look_nearby = 1

changes = []
for i in range(look_nearby, s.shape[0]-look_nearby):
    if s[i, i+look_nearby] > factor*s[i, i-look_nearby] or factor*s[i, i+look_nearby] < s[i, i-look_nearby]:
        changes.append(i)
        
print(changes)

根据您的喜好(因为您不想在第一张图像的输出中设置({1200,1200))并根据s的值设置factor的值。

答案 2 :(得分:0)

通过DBSCAN聚类解决(在同一问题DBSCAN for clustering of geographic location data中找到)

from sklearn.cluster import DBSCAN

clustering = DBSCAN(eps=.5, min_samples=10).fit_predict(s)

peaks = np.where(clustering[:-1] != clustering[1:])[0]