Python 以最快的方式重复不同次数的矩阵列表

Python 以最快的方式重复不同次数的矩阵列表,python,numpy,Python,Numpy,我有一个N个矩阵的列表,每个矩阵的形状都相同(dim1,dim2)。 我还有一个N个整数的列表,说明每个矩阵要重复多少次。 创建矩阵列表中每个矩阵的numpy数组的最快方法是什么,根据重复列表重复x次 例如: mat_a = np.array([[1, 2],[3, 4]]) # mat_a.shape = (2,2) mat_b = np.array([[5, 6],[7, 8]]) # mat_b.shape = (2,2) matrices = [mat_a, mat_b] repeats

我有一个N个矩阵的列表,每个矩阵的形状都相同(dim1,dim2)。 我还有一个N个整数的列表,说明每个矩阵要重复多少次。 创建矩阵列表中每个矩阵的numpy数组的最快方法是什么,根据重复列表重复x次

例如:

mat_a = np.array([[1, 2],[3, 4]]) # mat_a.shape = (2,2)
mat_b = np.array([[5, 6],[7, 8]]) # mat_b.shape = (2,2)
matrices = [mat_a, mat_b]
repeats = [2, 3]  

result = np.array([mat_a, mat_a, mat_b, mat_b, mat_b]) # results.shape = (5, 2, 2)
我能想到的唯一方法是使用一个非常慢的循环:

result = np.array([], dtype=float).reshape(0, 2, 2)
for i in range(len(repeats)):
    result = np.vstack((result, np.tile(matrices[i], (repeats[i], 1, 1))))
编辑:现在看看Shalom Rochman更好的解决方案。。。我不会删除这个,以防还有有用的内容,但显然
np。重复
是最好的选择



这有用吗?如果矩阵是numpy数组:

matrices = np.array([mat_a, mat_b])
您有一个列表
[0,0,1,1,1]

indices = [i for i, n in enumerate(repeats) for _ in range(n)]
然后,您可以使用以下方法对其进行索引:

matrices[indices]
其中:

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

       [[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]],

       [[5, 6],
        [7, 8]],

       [[5, 6],
        [7, 8]]])
编辑:现在看看Shalom Rochman更好的解决方案。。。我不会删除这个,以防还有有用的内容,但显然
np。重复
是最好的选择



这有用吗?如果矩阵是numpy数组:

matrices = np.array([mat_a, mat_b])
您有一个列表
[0,0,1,1,1]

indices = [i for i, n in enumerate(repeats) for _ in range(n)]
然后,您可以使用以下方法对其进行索引:

matrices[indices]
其中:

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

       [[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]],

       [[5, 6],
        [7, 8]],

       [[5, 6],
        [7, 8]]])

鉴于上述定义的变量“矩阵”和“重复”,您需要的是:

result = np.repeat(matrices, repeats, axis=0)

鉴于上述定义的变量“矩阵”和“重复”,您需要的是:

result = np.repeat(matrices, repeats, axis=0)

你的建议答案在我看来可能是正确的。我唯一会想到的是连接。
np.repeat(matrix,repeats,axis=0)
给出了正确的答案你的建议答案在我看来可能是正确的。我唯一会想到的是连接。
np.repeat(matrix,repeats,axis=0)
给出正确的答案谢谢,是的,这显然是一种方法。谢谢,这比使用for循环快10倍多。谢谢,是的,这显然是一种方法。谢谢,这比使用for循环快10倍多。