Python:调整数组大小并填充零
我觉得我的问题应该很简单,但在网上找不到任何帮助。我刚开始学Python,所以可能有些很明显的地方我没注意到。
我有一个数组,叫做S,长得像这样 [x x x] (一维)
。然后我用 np.diag(S)
创建了一个对角矩阵 sigma
,到这里一切都还好。接下来,我想调整这个新的对角数组的大小,以便能和我手头的另一个数组相乘。
import numpy as np
...
shape = np.shape((6, 6)) #This will be some pre-determined size
sigma = np.diag(S) #diagonalise the matrix - this works
my_sigma = sigma.resize(shape) #Resize the matrix and fill with zeros - returns "None" - why?
可是,当我打印 my_sigma
的内容时,结果却是 "None"
。有人能帮我指点一下方向吗?我实在想不明白这怎么会这么复杂。
提前感谢任何帮助!
Casper
图示:
我现在有这个:
[x x x]
我想要这个:
[x 0 0]
[0 x 0]
[0 0 x]
[0 0 0]
[0 0 0]
[0 0 0] - or some similar size, but the diagonal elements are important.
5 个回答
5
我看到你修改过的内容了……你确实需要先创建零,然后再把一些数字放进去。np.diag_indices_from
可能对你有帮助。
bigger_sigma = np.zeros(shape, dtype=sigma.dtype)
diag_ij = np.diag_indices_from(sigma)
bigger_sigma[diag_ij] = sigma[diag_ij]
25
sigma.resize()
这个函数返回 None
是因为它是在原地操作,也就是说它直接修改了原来的数据。而 np.resize(sigma, shape)
则会返回一个新的结果,但它不是用零来填充,而是用原数组的重复部分来填充。
另外,shape()
函数返回的是输入数据的形状。如果你只是想预先定义一个形状,可以直接使用一个元组。
import numpy as np
...
shape = (6, 6) #This will be some pre-determined size
sigma = np.diag(S) #diagonalise the matrix - this works
sigma.resize(shape) #Resize the matrix and fill with zeros
不过,这样做会先把你原来的数组“压扁”,然后再按照给定的形状重建,这样会打乱原来的顺序。如果你只是想用零来“填充”,那么不如直接在生成的零矩阵中进行索引,而不是使用 resize()
。
# This assumes that you have a 2-dimensional array
zeros = np.zeros(shape, dtype=np.int32)
zeros[:sigma.shape[0], :sigma.shape[1]] = sigma