我想创建一个形状为(3, 3, 4)
的数组。用于填充数组的数据已给出。
我的解决方案现在工作得很好,但感觉我错过了一个 numpy 教训。我不想一遍又一遍地做多个.repeat()
。
start = np.linspace(start=10, stop=40, num=4)
arr = np.repeat([start], 3, axis=0)
arr = np.repeat([arr], 3, axis=0)
arr
# output
array([[[10., 20., 30., 40.],
[10., 20., 30., 40.],
[10., 20., 30., 40.]],
[[10., 20., 30., 40.],
[10., 20., 30., 40.],
[10., 20., 30., 40.]],
[[10., 20., 30., 40.],
[10., 20., 30., 40.],
[10., 20., 30., 40.]]])
3条答案
按热度按时间pbpqsu0x1#
您提到的数组可以通过首先使用
np.linspace()
创建一个1D数组,然后使用np.tile()
以所需的形状重复该数组来创建。以下是更新的代码:
我认为这是创建所需数组的更简洁的方法。
下面是你得到的输出:
在上面的代码中,
np.tile()
用于以(3, 3, 1)
的形状重复start
数组。添加最后一个维度(1)
以匹配(3, 3, 4)
所需的形状并正确分配值。ni65a41a2#
有多种方法可以创建所需的数组,但请记住,由于broadcasting,在许多情况下,数组可以自动像
(3, 3, 4)
形状的数组一样运行。在这种情况下,我认为创建所需数组的最优雅方法是通过
np.broadcast_to
“强制”广播:输出:
rt4zxlrg3#
除了tile之外的另一个选项是使用broadcast_to。
导致期望的结果。