nans。目标是构建一个与 masks 长度相同的数组 ret,其中包含 vals 中与 T-6ren">
gpt4 book ai didi

python - "Unsparsing"具有给定掩码的 numpy 数组

转载 作者:行者123 更新时间:2023-12-01 04:28:40 29 4
gpt4 key购买 nike

假设有两个数组,vals 包含值,masks 包含 bool 值,指示是使用 vals 中的值,还是使用 >nans。目标是构建一个与 masks 长度相同的数组 ret,其中包含 vals 中与 True< 对应位置的值掩码中的条目。

例如,假设

vals = np.array([1, 2])
masks = [True, False, False, True]

那么返回值ret应该是

array([1, None, None, 2], dtype=object)
<小时/>

使用循环显然很容易做到这一点:

import numpy as np

def unsparse(vals, masks):
vals_i = 0
ret = []
for m in masks:
if m:
ret.append(vals[vals_i])
vals_i += 1
else:
ret.append(None)
return np.array(ret)

>> unsparse(np.array([1, 2]), [True, False, False, True])
array([1, None, None, 2], dtype=object)

有没有一种方法可以在没有循环的情况下更简洁地做到这一点?

最佳答案

你可以做这样的事情 -

out = np.empty(masks.shape,dtype=object)
out[masks] = vals[:masks.sum()]

请注意,:masks.sum()vals 中选择前 N 个元素,其中 N 是掩码中 TRUE 元素的数量。

如果保证 TRUE 元素的数量与 vals 中的元素数量相同,那么您可以简单地执行 -

out[masks] = vals 

示例运行 -

In [34]: vals = np.array([1, 2, 6, 8, 9])
...: masks = np.array([True, False, False, True, False, True])
...:

In [35]: out = np.empty(masks.shape,dtype=object)
...: out[masks] = vals[:masks.sum()]
...:

In [36]: out
Out[36]: array([1, None, None, 2, None, 6], dtype=object)

关于python - "Unsparsing"具有给定掩码的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733203/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com