我有一个表示为 numpy 数组的对称矩阵,如下例所示:
[[ 1. 0.01735908 0.01628629 0.0183845 0.01678901 0.00990739 0.03326491 0.0167446 ] [ 0.01735908 1。0.0213712 0.02364181 0.02603567 0.01807505 0.0130358 0.0107082 ] [0.01628629 0.0213712 1。0.01293289 0.02041379 0.01791615 0.00991932 0.01632739] [0.0183845 0.02364181 0.01293289 1。0.02429031 0.01190878 0.02007371 0.01399866] [0.01678901 0.02603567 0.02041379 0.02429031 1。0.01496896 0.00924174 0.00698689] [0.00990739 0.01807505 0.01791615 0.01190878 0.01496896 1。0.0110924 0.01514519] [0.03326491 0.0130358 0.00991932 0.02007371 0.00924174 0.0110924 1.0.00808803] [ 0.0167446 0.0107082 0.01632739 0.01399866 0.00698689 0.01514519 0.00808803 1. ]]
并且我需要在不考虑对角线的情况下找到最大值的索引(行和列)。因为是一个对称矩阵,所以我只取矩阵的上三角形。
ind = np.triu_indices(M_size, 1)
然后最大值的索引
max_ind = np.argmax(H[ind])
但是 max_ind 是取上三角形后得到的向量的索引使用 triu_indices ,我如何知道我刚刚找到的值的行和列?
矩阵可以是任何大小,但它始终是对称的。您知道有更好的方法来实现同样的目的吗? 谢谢
import numpy as np
# 示例矩阵
H = np.array([[ 1. , 0.01735908, 0.01628629, 0.0183845 , 0.01678901,
0.00990739, 0.03326491, 0.0167446 ],
[ 0.01735908, 1. , 0.0213712 , 0.02364181, 0.02603567,
0.01807505, 0.0130358 , 0.0107082 ],
[ 0.01628629, 0.0213712 , 1. , 0.01293289, 0.02041379,
0.01791615, 0.00991932, 0.01632739],
[ 0.0183845 , 0.02364181, 0.01293289, 1. , 0.02429031,
0.01190878, 0.02007371, 0.01399866],
[ 0.01678901, 0.02603567, 0.02041379, 0.02429031, 1. ,
0.01496896, 0.00924174, 0.00698689],
[ 0.00990739, 0.01807505, 0.01791615, 0.01190878, 0.01496896,
1. , 0.0110924 , 0.01514519],
[ 0.03326491, 0.0130358 , 0.00991932, 0.02007371, 0.00924174,
0.0110924 , 1. , 0.00808803],
[ 0.0167446 , 0.0107082 , 0.01632739, 0.01399866, 0.00698689,
0.01514519, 0.00808803, 1. ]])
M_size = H.shape[0]
ind = np.triu_indices(M_size, 1)
max_ind = np.argmax(H[ind])
# 获取行和列索引
row_ind, col_ind = ind[0][max_ind], ind[1][max_ind]
print("上三角形中最大值的索引:", max_ind)
print("行索引:", row_ind)
print("列索引:", col_ind)
在此代码中:
-
我们首先使用
np.triu_indices(M_size, 1)
获取上三角形(不包括对角线)的索引。 -
np.argmax(H[ind])
为我们提供了展平后的上三角形部分中的最大值的索引。 -
诀窍在于使用
ind[0][max_ind]
和ind[1][max_ind]
从triu_indices
获取相应的行和列索引。
此方法直接使用
triu_indices
返回的索引来查找原始矩阵中的行和列位置,从而有效地为提供了所需的结果。
请告诉我,如果想探索其他方法或对该解决方案有任何其他问题!
标签:python,numpy,matrix From: 21316056