通过重复 2D numpy 数组中的值创建 4D numpy 数组
Creating 4D numpy array by repeating values from 2D numpy array
我有一个 2D numpy 数组,比如 array1
和值。 array1
的尺寸为 2x4。我想创建一个尺寸为 20x20x2x4 的 4D numpy 数组 array2
,我希望复制数组 array1
来获取此数组。
也就是说,如果 array1
是
[[1, 2, 3, 4],
[5, 6, 7, 8]]
我要
array2[0, 0] = array1
array2[0, 1] = array1
array2[0, 2] = array1
array2[0, 3] = array1
# etc.
我该怎么做?
一种初始化方法-
array2 = np.empty((20,20) + array1.shape,dtype=array1.dtype)
array2[:] = array1
运行时测试 -
In [400]: array1 = np.arange(1,9).reshape(2,4)
In [401]: array1
Out[401]:
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
# @MSeifert's soln
In [402]: %timeit np.tile(array1, (20, 20, 1, 1))
100000 loops, best of 3: 8.01 µs per loop
# Proposed soln in this post
In [403]: %timeit initialization_based(array1)
100000 loops, best of 3: 4.11 µs per loop
# @MSeifert's soln for READONLY-view
In [406]: %timeit np.broadcast_to(array1, (20, 20, 2, 4))
100000 loops, best of 3: 2.78 µs per loop
有两种简单的方法:
array2 = np.broadcast_to(array1, (20, 20, 2, 4)) # array2 is a READONLY-view
和np.tile
:
array2 = np.tile(array1, (20, 20, 1, 1)) # array2 is a normal numpy array
如果您不想修改 array2
,那么 np.broadcast_to
应该非常快速和简单。否则 np.tile
或分配给新分配的数组(参见 )应该是首选。
我得到了答案。
array2[:, :, :, :] = array1.copy()
这应该可以正常工作
我有一个 2D numpy 数组,比如 array1
和值。 array1
的尺寸为 2x4。我想创建一个尺寸为 20x20x2x4 的 4D numpy 数组 array2
,我希望复制数组 array1
来获取此数组。
也就是说,如果 array1
是
[[1, 2, 3, 4],
[5, 6, 7, 8]]
我要
array2[0, 0] = array1
array2[0, 1] = array1
array2[0, 2] = array1
array2[0, 3] = array1
# etc.
我该怎么做?
一种初始化方法-
array2 = np.empty((20,20) + array1.shape,dtype=array1.dtype)
array2[:] = array1
运行时测试 -
In [400]: array1 = np.arange(1,9).reshape(2,4)
In [401]: array1
Out[401]:
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
# @MSeifert's soln
In [402]: %timeit np.tile(array1, (20, 20, 1, 1))
100000 loops, best of 3: 8.01 µs per loop
# Proposed soln in this post
In [403]: %timeit initialization_based(array1)
100000 loops, best of 3: 4.11 µs per loop
# @MSeifert's soln for READONLY-view
In [406]: %timeit np.broadcast_to(array1, (20, 20, 2, 4))
100000 loops, best of 3: 2.78 µs per loop
有两种简单的方法:
array2 = np.broadcast_to(array1, (20, 20, 2, 4)) # array2 is a READONLY-view
和np.tile
:
array2 = np.tile(array1, (20, 20, 1, 1)) # array2 is a normal numpy array
如果您不想修改 array2
,那么 np.broadcast_to
应该非常快速和简单。否则 np.tile
或分配给新分配的数组(参见
我得到了答案。
array2[:, :, :, :] = array1.copy()
这应该可以正常工作