在numpy距离对称矩阵中获取对角线正方形坐标
Get diagonal squares coordinates in numpy distance symmetric 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)
我尝试在第一行获取峰值,但有噪声信息
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()
更新,添加另一个例子
并上传到 colab 完整脚本 https://colab.research.google.com/drive/1hyDIDs-QjLjD2mVIX4nNOXOcvCZY4O2c?usp=sharing
使用np.diag(df)
得到对角线元素的列表。如果屏幕截图中的颜色代表 below/above 某个值,可能为零,请检查值何时超过阈值。
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
值。
用DBSCAN clustering (find in same question )
求解
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=.5, min_samples=10).fit_predict(s)
peaks = np.where(clustering[:-1] != clustering[1:])[0]
如何获取对角线上的大矩形的坐标。
例如黄色[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)
我尝试在第一行获取峰值,但有噪声信息
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()
更新,添加另一个例子 并上传到 colab 完整脚本 https://colab.research.google.com/drive/1hyDIDs-QjLjD2mVIX4nNOXOcvCZY4O2c?usp=sharing
使用np.diag(df)
得到对角线元素的列表。如果屏幕截图中的颜色代表 below/above 某个值,可能为零,请检查值何时超过阈值。
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
值。
用DBSCAN clustering (find in same question
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=.5, min_samples=10).fit_predict(s)
peaks = np.where(clustering[:-1] != clustering[1:])[0]