具有相同形状的常数对角线零矩阵

14 投票
2 回答
16155 浏览
提问于 2025-04-16 16:47

我在想有没有简单的方法可以把一个numpy矩阵乘以一个常数。简单来说,我想把所有的值都乘以40。这个矩阵是一个nxn的方阵,对角线上的值都是40,但我在想有没有更简单的函数可以用来缩放这个矩阵。或者我该怎么做才能创建一个和我其他矩阵形状相同的矩阵,并把它的对角线填上值呢?

抱歉如果这个问题听起来有点基础,但我不知道为什么在文档里找不到这个内容。

2 个回答

9

简单来说:

N = 100
a = np.eye(N)  # Diagonal Identity 100x100 array
b = 40*a  # Multiply by a scalar

如果你真的想要一个numpy的矩阵,而不是数组,可以用 a = np.asmatrix(np.eye(N)) 这个方法来实现。不过一般情况下,* 在numpy里是指逐个元素相乘的意思。

17

如果你想要一个对角线上是40,其他地方都是0的矩阵,可以使用NumPy的一个函数fill_diagonal(),先创建一个全是0的矩阵,然后直接填充对角线。你可以这样做:

N = 100; value = 40
b = np.zeros((N, N))
np.fill_diagonal(b, value)

这个方法只需要设置某些元素的值,所以通常比把整个矩阵的每个元素都乘以一个常数要快。而且,这种方法的好处是很清楚地显示了你是把对角线填上了一个特定的值。

如果你想让对角矩阵b和另一个矩阵a大小一样,可以用下面这个快捷方式(不需要明确指定大小N):

b = np.zeros_like(a)
np.fill_diagonal(b, value)

撰写回答