如何扩展numpy数组的维度?



我有以下numpy数组:

import numpy as np
a = []
a.append(np.random.randn(10, 5))
a.append(np.random.randn(10, 6))
a.append(np.random.randn(10, 4))

我需要将列表a中每个数组的列数扩展到10,这样我就可以在列表a中获得(10,10)维数组。新列的值用1填充。

我该怎么做?

您可以尝试以下操作

import numpy as np
a = []
a.append(np.random.randn(10, 5))
a.append(np.random.randn(10, 6))
a.append(np.random.randn(10, 4))
out = np.ones((len(a), 10, 10))
for i in range(len(a)):
out[i,:a[i].shape[0],:a[i].shape[1]] = a[i].copy()

内容将增加额外的计算成本,因为它将复制新创建的1矩阵。

如果你想要一个10x10的数组,你可以这样做:

my_array = np.ones((10,10))
print(my_array)
print(my_array.shape)

否则,你不能在数组已经创建之后改变它的形状。

对于给定形状为(10, i)的张量,可以用1s来补全它,以匹配形状为(10, 10)的张量。使用np.ones可以创建形状为(10, 10-i)的张量:

对于a的第一个元素,它看起来像:

>>> np.ones((10, 10-x.shape[1]))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])

然后,将该张量与具有np.concatenate:

的张量合并
>>> o = np.ones((10, 10-x.shape[1]))
>>> xo = np.concatenate((x, o), axis=1)
>>> xo.shape
(10, 10)

您可以在a:

上使用列表推导式获得所需的结果
>>> [np.concatenate((x, np.ones((10, 10-x.shape[1]))), 1) for x in a]

您可以创建一个形状为(10,10)的矩阵,并将它的第一个(10,n)个成员设置为您的矩阵。您的示例的工作解决方案:

for i in range(len(a)):
array = a[i]
result = np.ones((10,10))
result[:array.shape[0],:array.shape[1]] = array
a[i] = result

最新更新