拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何从形状不规则的阵列中洗掉元素?

如何从形状不规则的阵列中洗掉元素?

白鹭 - 2022-02-24 1940 0 0
labels_1 = np.array([[-100,32,34,25,2,35,2,5,-100,-100],[-100,35,2,5,-100,-100]])
pred_1 = np.array([[8,32,3,25,2,3,2,5,8],[8,3,2,5,8]])

我想去掉labels_1 中的-100s 并从pred_1 中获取相应匹配的索引元素。

例如,输出应该是

labels_1 = np.array([[32,34,25,2,35,2,5],[35,2,5]])
pred_1 = np.array([[32,3,25,2,3,2,5],[3,2,5]])

我尝试使用,np.where(labels_1!=-100)但它仅适用于具有相同长度串列的阵列,但正如您所见,labels_1 中的阵列具有不同的长度,这是一个问题。

uj5u.com热心网友回复:

我相信你正在寻找的是:

pred_1 = [[b for a, b in zip(la, lb) if a != -100] for la, lb in zip(labels_1, pred_1)]
labels_1 = [[a for a in la if a != -100] for la in labels_1]

结果:

>>> labels_1
[[32, 34, 25, 2, 35, 2, 5], [35, 2, 5]]

>>> pred_1
[[32, 3, 25, 2, 3, 2, 5], [3, 2, 5]]

正如评论中所说,您不能在numpy. 如果你尝试,你应该看到一个响亮的VisibleDeprecationWarning您可以查看掩码阵列,如果它更适合您的需要,但否则您最好使用简单串列(在本例中为串列)。

uj5u.com热心网友回复:

通过在 numpy 阵列中使用大小不均匀的串列,您会破坏 numpy 阵列的目的,因此您可以为此使用 numpy 解决方案。

不过,您可以使用串列理解来完成此任务:

labels_1 = np.array([[x for x in y if x != -100] for y in labels_1])
pred_1 = np.array([[x for x in y if x != -100] for y in pred_1])

输出:

>>> labels_1
array([list([32, 34, 25, 2, 35, 2, 5]), list([35, 2, 5])], dtype=object)

>>> pred_1
array([list([8, 32, 3, 25, 2, 3, 2, 5, 8]), list([8, 3, 2, 5, 8])], dtype=object)
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *