假设有两个数组,vals
包含值,masks
包含布尔值,指示是使用vals
,还是nan
s中的值。目标是构建一个长度与masks
相同的数组ret
,其中包含来自{True
中{
例如,假设
vals = np.array([1, 2])
masks = [True, False, False, True]
那么返回值ret
应该是
使用循环显然非常容易:
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)
有没有一种方法可以不用循环,而且更简洁?在
你可以这样做-
请注意,
:masks.sum()
从vals
中选择第一个N
个元素,其中N
是掩码中TRUE
元素的数目。在如果保证真元素的数量与
^{pr2}$vals
中的元素数相同,那么您可以简单地-样本运行-
相关问题 更多 >
编程相关推荐