Python 以最快的方式重复不同次数的矩阵列表
我有一个N个矩阵的列表,每个矩阵的形状都相同(dim1,dim2)。 我还有一个N个整数的列表,说明每个矩阵要重复多少次。 创建矩阵列表中每个矩阵的numpy数组的最快方法是什么,根据重复列表重复x次 例如: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
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倍多。