NumPy:如何沿新轴扩展数组?

26

肯定有一种方法可以做到这一点...我想不出来。

我有一个(9,4)数组,我想沿第三个轴重复它4096次...因此它变成了简单的(9,4,4096),其中来自9,4数组的每个值在新轴上被简单地重复4096次。

如果我的可疑的3D图表有意义(对角线是z轴)

4|   /off to 4096
3|  /
2| /
1|/_ _ _ _ _ _ _ _ _ 
   1 2 3 4 5 6 7 8 9

干杯

编辑:为了澄清,这里强调的是(9,4)数组将在新轴的4096个“行”中重复。想象一个横截面-每个原始的(9,4)数组是那4096个长方体中的一个。


np.tile是另一个选项。请参见此问题的答案 - abcd
你还为4乘9矩阵绘制了图表。 :) - Ajeet Ganga
5个回答

25

以下是一种方法:

import scipy
X = scipy.rand(9,4,1)
Y = X.repeat(4096,2)

如果你只知道(9,4)这个点,那么 X 是多少?

import scipy
X = scipy.rand(9,4)
Y = X.reshape(9,4,1).repeat(4096,2)

1
再次感谢Steve,因为我没有意识到在使用重复方法之前必须重新调整数组的形状而感到困惑-它一直告诉我正在尝试使用未定义的轴。现在很清楚了。 - Duncan Tait

11

你也可以依靠广播规则来重复填充重新调整大小的数组:

import numpy
X = numpy.random.rand(9,4)
Y = numpy.resize(X,(4096,9,4))

如果您不喜欢以这种方式排序的轴,您可以进行转置:

Z = Y.transpose(1,2,0)

7

虽然这个问题很老,但我还是提供另一个选项:

import numpy as np
X = np.random.rand(9,4)
Y = np.dstack([X] * 4096)

1
你可以使用[X] * 4096代替[X for i in range(4096)] - blubberdiblub

2
一个简单的 numpy 解决方案是使用 numpy.tile。
import numpy as np
a = np.random.rand(9, 4)
b = np.tile(a, (4096, 1, 1))

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接