仅对次列表中包含的元素应用NumPy重复

iezvtpos  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(121)

我尝试在一个列表中重复某些元素n次,到目前为止,我得到了这个解决方案:

_base = ["a", "z", "c", "c", "e"]
                for bump_element in ["a", "b", "c"]:
                    _base = np.repeat(
                        np.array(_base),
                        np.where(np.array(_base) == bump_element, 2, 1)
                    )

到目前为止,_base应该是['a' 'a' 'z' 'c' 'c' 'c' 'c' 'e']。但是,我试图通过删除for循环来使它更快,以便在一个repeat中可以捕获所有元素。类似于:

_base = np.repeat(
                        np.array(_base),
                        np.where(np.array(_base) in ["a", "b", "c"], 2, 1)
                    )

但这是行不通的,因为它会抛出The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有没有简单的方法让where子句检查列表中的每一项,并将其与包含要重复的元素的项进行比较?

to94eoyn

to94eoyn1#

要避免for循环遍历'bump_element'中的可能值,可以使用numpy isin

_base = np.array(["a", "z", "c", "c", "e"])
bump = np.array(["a", "b", "c"])
np.repeat(_base, np.where(np.isin(_base, bump), 2, 1))

相关问题