NumPy:平铺到特定大小

问题描述

让我们说我们有一个模式

x = np.array([1,2,3])

我们想重复该模式以填充大小为n >> x.size的数组。

我们可以做类似的事情:

np.tile(x,1 + (n // x.size))[:n]

我们可以根据形状对二维数组做类似的事情。 (而不是大小)并将其抽象为一个函数

以二维数组为例:

pattern = np.array([[1,2],[4,5]])
n_rows = 7
n_cols = 5
np.tile(
    pattern,(1 + (n_rows // pattern.shape[0]),1 + (n_cols // pattern.shape[1]))
)[:n_rows,:n_cols] 

Out:
array([[1,1,1],5,4,4],[1,1]])

我的问题:NumPy中是否有本地方法

解决方法

您可以使其更通用一些,但是没有内置功能

x = np.array([[1,2],[4,5]])
shape = (7,5)

np.tile(x,np.array(shape)//np.array(np.shape(x)) + 1)[tuple(map(slice,shape))]