Is there a numpy function like np.fill(), but for arrays as fill value?

情到浓时终转凉″ 提交于 2021-01-29 07:11:28

问题


I'm trying to build an array of some given shape in which all elements are given by another array. Is there a function in numpy which does that efficiently, similar to np.full(), or any other elegant way, without simply employing for loops?

Example: Let's say I want an array with shape (dim1,dim2) filled with a given, constant scalar value. Numpy has np.full() for this:

my_array = np.full((dim1,dim2),value)

I'm looking for an analog way of doing this, but I want the array to be filled with another array of shape (filldim1,filldim2) A brute-force way would be this:

my_array = np.array([])
for i in range(dim1):
    for j in range(dim2):
        my_array = np.append(my_array,fill_array)
my_array = my_array.reshape((dim1,dim2,filldim1,filldim2))

EDIT

I was being stupid, np.full() does take arrays as fill value if the shape is modified accordingly:

my_array = np.full((dim1,dim2,filldim1,filldim2),fill_array)

Thanks for pointing that out, @Arne!


回答1:


You can use np.tile:

>>> shape = (2, 3)
>>> fill_shape = (4, 5)
>>> fill_arr = np.random.randn(*fill_shape)

>>> arr =  np.tile(fill_arr, [*shape, 1, 1])

>>> arr.shape
(2, 3, 4, 5)

>>> np.all(arr[0, 0] == fill_arr)
True

Edit: better answer, as suggested by @Arne, directly using np.full:

>>> arr = np.full([*shape, *fill_shape], fill_arr)                                               

>>> arr.shape                                                                                    
(2, 3, 4, 5)

>>> np.all(arr[0, 0] == fill_arr)                                                                
True


来源:https://stackoverflow.com/questions/62771314/is-there-a-numpy-function-like-np-fill-but-for-arrays-as-fill-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!