Python 在numpy距离对称矩阵中得到对角平方坐标

Python 在numpy距离对称矩阵中得到对角平方坐标,python,pandas,numpy,cosine-similarity,distance-matrix,Python,Pandas,Numpy,Cosine Similarity,Distance Matrix,如何得到对角线上的大矩形的坐标 例如黄色[0615]、[6151438]、[14381526] 将numpy作为np导入; 作为pd进口熊猫 从sklearn.metrics.pairwise导入余弦_相似性 df=pd.数据帧(数组)#数组是图像numpy df.shape#(1526360) s=余弦相似性(df)#(15261526) 马绍公共交通(s) 我试着在第一排得到峰值,但有噪声信息 speak = 1-s[0] peaks, _ = find_peaks(speak, di

如何得到对角线上的大矩形的坐标

例如黄色[0615]、[6151438]、[14381526]

将numpy作为np导入;
作为pd进口熊猫
从sklearn.metrics.pairwise导入余弦_相似性
df=pd.数据帧(数组)#数组是图像numpy
df.shape#(1526360)
s=余弦相似性(df)#(15261526)
马绍公共交通(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完整脚本


使用
np.diag(df)
获得对角线元素列表。当值超过阈值时检查屏幕截图中的颜色是否代表低于/高于某个值,可能为零。

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

余弦相似性的所有对角线元素都相同。因此,您应该查找附近值的变化

你可以试试这个:

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)
系数=1.01
看你附近=1
变化=[]
对于范围内的i(近看,s.shape[0]-近看):
如果s[i,i+look_Nearest]>factor*s[i,i-look_Nearest]或factor*s[i,i+look_Nearest]

根据您的偏好设置
因子
值(因为您不希望在第一张图像的输出中使用(1200,1200)和s的值。

余弦相似性的所有对角线元素都是相同的。因此,您应该查找附近值的变化

你可以试试这个:

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)
系数=1.01
看你附近=1
变化=[]
对于范围内的i(近看,s.shape[0]-近看):
如果s[i,i+look_Nearest]>factor*s[i,i-look_Nearest]或factor*s[i,i+look_Nearest]
根据您的偏好设置
因子
值(因为您不希望在第一张图像的输出中使用(1200,1200)和s的值。

使用聚类求解(在同一问题中查找)

从sklearn.cluster导入DBSCAN
聚类=DBSCAN(eps=0.5,最小样本数=10)。拟合预测
peaks=np.where(clustering[:-1]!=clustering[1:])[0]
使用群集解决(在同一问题中查找)

从sklearn.cluster导入DBSCAN
聚类=DBSCAN(eps=0.5,最小样本数=10)。拟合预测
peaks=np.where(clustering[:-1]!=clustering[1:])[0]


s的形状是什么?@RahulVishwakarma(15261526)提供了一个s的样本。或者提供一个代码来生成it@RahulVishwakarma将数据帧上载到csv链接对我不起作用。但我补充了一个答案,看看是否有用。s的形状是什么?@RahulVishwakarma(15261526)提供了一个s的样本。或者提供一个代码来生成it@RahulVishwakarma将数据帧上载到csv链接对我不起作用。但是我已经添加了一个答案,检查它是否有用。需要“s=cosine\u相似度(df)”的对角线,那么结果总是会有等于1的值,然后在
np.diag(s)
中循环。没有你的值,我不知道你的图中的颜色是什么意思。@Aramkus是的,你是对的,但是在距离矩阵上,对角线值总是对应于元素本身,那里没有有用的信息。有必要精确地观察对角线上的大正方形面积。我将dataframe上传到csv dropmefiles.com/CxWeyIf matplotlib以相同的颜色绘制这些区域,其中的值非常相似,因此对角线应该包含所有信息。您可以尝试找到对角线数组与其自身滚动平均数相交的点。在这样的地方,
s
中的值会快速变化。@Aramkus我只举了一个例子,颜色并不重要,正方形可以不同。。。我正在寻找一种算法,可能类似于分类或聚类,需要“s=cosine\u相似度(df)”的对角线,然后发现总是有等于1的值,然后通过
np.diag进行循环。没有你的值,我不知道你的图中的颜色是什么意思。@Aramkus是的,你是对的,但是在距离矩阵上,对角线值总是对应于元素本身,那里没有有用的信息。有必要精确地观察对角线上的大正方形面积。我将dataframe上传到csv dropmefiles.com/CxWeyIf matplotlib以相同的颜色绘制这些区域,其中的值非常相似,因此对角线应该包含所有信息。您可以尝试找到对角线数组与其自身滚动平均数相交的点。在这样的地方,
s
中的值会快速变化。@Aramkus我只举了一个例子,颜色并不重要,正方形可以不同。。。我正在寻找一种算法,可能类似于分类或聚类
[607, 608, 612, 613, 614, 615, 616, 617, 618, 1380, 1381, 1382, 1383, 1385, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1440, 1441, 1442, 1443, 1444, 1445, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1473, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488.......1519, 1520, 1521, 1522, 1524]
非常感谢,但也许我不能正确地回答这个问题……我需要大的间隔,尽可能明亮,但不是全部是的。要获得大的间隔,你应该更改因子值,尝试将其增加到2或1.5或其他值,或将其减少到0.5或其他值。如果没有看到c的sUpload的实际数据,我无法说出因子值olad完整示例此Colab笔记本运行良好,错误是什么?您希望我添加的图像的输出是什么,您如何使用回答中给出的代码获得各种因子值