我有以下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)
的张量,可以用1
s来补全它,以匹配形状为(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