【发布时间】:2021-05-06 12:34:59
【问题描述】:
我的最终目标是为 for 循环使用矢量化 numpy 解决方案。如果原始元素中未给出其元素,则此循环为每个元素从另一个列表中创建一个随机样本。但是,for 循环的输入是列表的列表。我不知道如何对列表应用 numpy 矢量化。这里有一个可重现的例子:
import random
list_of_all_items = [1, 2, 3, 4, 12, 21, 23, 42, 93]
seen_formats = [[1, 2, 3, 4], [2,23, 21, 3], [12, 42, 93, 1]]
not_seen_formats = []
for seen in seen_formats:
not_seen_formats.append(random.sample([format_ for format_ in list_of_all_items if format_ not in seen],
len(seen) * 1))
到目前为止我尝试的是:
import numpy as np
np.where(np.in1d(np.random.choice(list_of_all_items, 2, replace = False), np.asarray(seen_formats)))
>> (array([0, 1], dtype=int64),)
遗憾的是,这毫无意义。我想要返回的是一个数组,它应该包含给定列表列表的随机样本,例如:
>> array([[12, 21], # those numbers should be random numbers
[ 1, 4],
[ 2, 3]])
【问题讨论】:
-
我们可以假设
seen_formats的形状还是它的每一行都可能有不同数量的元素? -
seen_formats的形状可以改变它的大小。甚至列表列表元素也可以变化。但是,这里指出的答案很好用。
标签: python arrays numpy vectorization