当前位置: 首页 > 知识库问答 >
问题:

在Python中,用行中其他元素的总和替换矩阵的对角元素

幸鸿轩
2023-03-14
import pandas as pd
import numpy as np
rates=(pd.read_excel("C:\Anaconda3\RateMatrix.xlsx", sheetname="Pu239Test", skiprows=0)).as_matrix() #read the matrix values from excel spreadsheet, and converts the values to a matrix

费率为22 x 22矩阵。

我想用行中所有其他元素的总和替换费率矩阵的对角线元素。

例如,

费率。项目(0,0)=费率。项目(0,1)费率。项目(0,2)费率。项目(0,3)。。。。费率。项目(0,21)

rates.item(1,1)=rates.item(1,0)rates.item(1,2)rates.item(1,3)rates.item(1,21)

.....

费率。第(21,21)项=费率。项目(21,0)费率。第(21,2)项费率。项目(21,3)。。。。费率。项目(21,20)

我在想我怎么能做到。提前多谢了。

共有1个答案

章晋鹏
2023-03-14

这是一种矢量化方法,它使用NumPy数组a作为输入-

In [171]: a        # Input array
Out[171]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

# Get row and column indices of diag elements    
In [172]: row,col = np.diag_indices_from(a)

# Assign the sum of each row except the diag elems into diag positions
In [173]: a[row,col] = a.sum(axis=1) - a[row,col]

# Updated array
In [174]: a
Out[174]: 
array([[10,  1,  2,  3,  4],
       [ 5, 29,  7,  8,  9],
       [10, 11, 48, 13, 14],
       [15, 16, 17, 67, 19],
       [20, 21, 22, 23, 86]])

让我们手动计算求和并对照对角线元素进行交叉检查-

In [175]: a[0,1] + a[0,2] + a[0,3] + a[0,4]
Out[175]: 10

In [176]: a[1,0] + a[1,2] + a[1,3] + a[1,4]
Out[176]: 29

In [177]: a[2,0] + a[2,1] + a[2,3] + a[2,4]
Out[177]: 48

In [178]: a[3,0] + a[3,1] + a[3,2] + a[3,4]
Out[178]: 67

In [179]: a[4,0] + a[4,1] + a[4,2] + a[4,3]
Out[179]: 86
 类似资料:
  • 这是我的审判,但它没有涵盖一切,也在重复,我做错了什么?

  • 问题内容: 我必须搜索一个列表,然后用一个元素替换所有出现的元素。到目前为止,我在代码方面的尝试使我无处可寻,做到这一点的最佳方法是什么? 例如,假设我的列表具有以下整数 我需要将所有出现的数字1替换为值10,所以我需要的输出是 因此,我的目标是将数字1的所有实例替换为数字10。 问题答案:

  • 在C++中,给定两个值a,b使得a<=b,x等于a或b,如何有效地得到另一个值y(如果a==b,最终等于x)?

  • SameGame示例 让我们以一个SameGame板为例。 如果两个块有一个共同的边,则它们是相邻的。组是由至少两个块组成的集合,所有块都是相同类型的,并且每个块都与组的至少一个其他成员相邻。当鼠标悬停在作为组的一部分的块上时,整个组应在视觉上突出显示。 举个矩阵的例子: 鼠标悬停怎么找一套? 我想过递归,但老实说,我不知道该怎么做。BFS似乎是我可以做的事情,但对于这样一个“简单”的事情来说,它

  • 我使用if-else检查numpy矩阵的索引i,i处的元素是否为0 得到了错误值错误:数组的真值有多个元素是含糊不清的。使用a.any()或a.all()对此有任何解决办法吗?

  • 所以我正在研究一个Leetcode问题,我的代码在某些情况下有效,但在某些情况下失败。 问题是: 给定一个矩阵,其中每个行和列都按升序排序,找出矩阵中第k个最小的元素。 请注意,它是排序顺序中的第k个最小元素,而不是第k个独立元素。 例子: 返回: 13 我的方法是使用minHeap,即使它声明数组已经排序,我仍然需要确保我已经将它从最小值排序到最大值。 这是我的代码: 以下是我的意见: 以下是输