如何在NumPy中实现矩阵行的动态重复而非统一重复?
按指定顺序动态重复矩阵的实现方案
现有代码中np.repeat(pt, repeats=l, axis=0)会将pt的每一行连续重复对应次数,最终输出是[pt[0], pt[0], pt[1], pt[1], pt[1], pt[2], ...],这和你期望的“循环遍历行并填充直到满足重复次数”的顺序不符。
要实现目标输出顺序(按原矩阵行的循环顺序,逐行填充直到每行达到指定重复次数),可以通过生成符合要求的索引数组,再用索引提取pt的行来实现:
import numpy as np p = np.array([[2, 2, 2], [2, 2, 2], [2, 2, 2]]) t = np.array([[9],[6],[3]]) l = [2, 3, 4] # 计算pt矩阵 pt = np.multiply(p, t) # 生成符合要求的索引数组 max_rep = max(l) # 创建掩码:判断每行在第i次循环时是否需要被包含 mask = np.arange(max_rep) < np.array(l)[:, np.newaxis] # 提取掩码为True的行索引,按循环顺序排列 indices = np.where(mask.T)[1] # 根据索引获取结果 result = pt[indices] print(result)
运行上述代码后,输出将与你期望的一致:
[[18 18 18] [12 12 12] [ 6 6 6] [18 18 18] [12 12 12] [ 6 6 6] [12 12 12] [ 6 6 6] [ 6 6 6]]
内容的提问来源于stack exchange,提问作者Arunmozhi
相关产品推荐
相关产品推荐

