如何将numpy阵列作为一个整体进行复制

2024-05-15 03:37:31 发布

您现在位置:Python中文网/ 问答频道 /正文

如何复制numpy数组,使其(作为一个整体数组)重复n次

因此,使用一个示例数组:

import numpy as np
x = np.arange(0, 5)

我想创建一个如下所示的数组,而不需要手动键入np.arange(0, 5)n次:

x_3times = np.concatenate([np.arange(0, 5), np.arange(0, 5), np.arange(0, 5)])     

或具有设定长度的输出(例如12)

x_12 = np.concatenate([np.arange(0, 5), np.arange(0, 5), np.arange(0, 5)])[0:12]  

Tags: importnumpy示例键入asnp数组手动
2条回答

您可以使用np.tile

>> x_3times = np.tile(x, 3)
>> x_3times

array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4])

要重复到某个特定限制,请使用np.resize

>> x_12 = np.resize(x, 12)
>> x_12

array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1])

只需尝试列表理解:

x_3times = np.concatenate([np.arange(0, 5) for x in range(3)])

其中,数字3可以被任何数字n替换

编辑

如果要将长度限制为任意数量,只需执行以下操作:

cutoff = 12
x_3times = np.concatenate([np.arange(0, 5) for x in range(3)])[:cutoff]

这将导致:

array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1])

然而,这不是一个非常有效的代码行,特别是在处理大量数据时。另一个答案可能是制造发电机:

def generator(arr, n, cutoff=None):
    length = len(arr)
    if cutoff:
        for i in range(cutoff):
            yield arr[i%length]
    else:
        for _ in range(n):
            for i in arr:
                yield i

array = np.array([x for x in generator(np.arange(0, 5), 3, 12)])

相关问题 更多 >

    热门问题