从上三角形获取矩阵的索引
Posted
技术标签:
【中文标题】从上三角形获取矩阵的索引【英文标题】:Get indices of matrix from upper triangle 【发布时间】:2014-01-23 18:07:01 【问题描述】:我有一个表示为 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 取上三角形后得到的向量的索引,我怎么知道我的值的行和列刚刚发现?
矩阵可以是任意大小,但始终是对称的。您知道实现相同目标的更好方法吗? 谢谢
【问题讨论】:
【参考方案1】:您不能通过使用np.triu
来返回矩阵的副本,其中除上三角以外的所有内容都归零,然后只使用np.argmax
和np.unravel_index
来获取行/列索引吗?
例子:
x = np.zeros((10,10))
x[3, 8] = 1
upper = np.triu(x, 1)
idx = np.argmax(upper)
row, col = np.unravel_index(idx, upper.shape)
这种方法的缺点是它会创建输入矩阵的副本,但它仍然应该比在 Python 中循环遍历元素要快得多。它还假设上三角形的最大值> 0。
【讨论】:
哇,我发现这是一种更优雅的方式。谢谢! 谢谢,但如果我说实话,我可能会选择 @Bonlenfum 的解决方案而不是我的解决方案——它不涉及创建数组的中间副本,也没有警告说上三角形的最大值必须为正数。【参考方案2】:您可以使用max_ind
的值作为ind
数据的索引
max_ind = np.argmax(H[ind])
Out: 23
ind[0][max_ind], ind[1][max_ind],
Out: (4, 6)
通过查找整个矩阵中的最大值来验证这一点(并不总是有效——取决于数据):
np.unravel_index(np.argmax(H), H.shape)
Out: (4, 6)
【讨论】:
【参考方案3】:可能有一种更简洁的“numpy 方式”来做到这一点,但这是首先想到的:
answer = None
biggest = 0
for r,row in enumerate(matrix):
i,elem = max(enumerate(row[r+1:]), key=operator.itemgetter(1))
if elem > biggest:
biggest, answre = elem, i
【讨论】:
以上是关于从上三角形获取矩阵的索引的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用upper.tri函数lower.tri函数diag函数改变matrix矩阵上三角形下三角形对角线的数值
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用底纹和颜色表示相关性变量按其原始顺序绘制上三角形空白
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用底纹和颜色表示相关性(自定义颜色)上三角形中添加相关性数值
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用平滑的拟合线和置信椭圆,上三角形中使用散点图对角线最小值和最大值