一个numpy数组z
是由2个Python列表构成的x
,y
其中的y
可以是的0
值和x
不能连续递增的值(即可以跳过的值)。
由于y
值也可以是0
,它将被混淆分配遗漏值z
是0
为好。
避免这种混乱的最佳实践是什么?
import numpy as np
# Construct `z`
x = [1, 2, 3, 5, 8, 13]
y = [12, 34, 56, 0, 78, 0]
z = np.ndarray(max(x)+1).astype(np.uint32) # missing values become 0
for i in range(len(x)):
z[x[i]] = y[i]
print(z) # [ 0 12 34 56 0 0 0 0 78 0 0 0 0 0]
print(z[4]) # missing value but is assigned 0
print(z[13]) # non-missing value but also assigned 0
您通常可以np.nan
为中不存在的索引分配或任何其他值x
。
另外,不需要for循环。您可以直接y
在一行中分配所有值,如我在此处所示。
但是,由于您正在将类型转换为uint32,因此无法使用np.nan
(为什么不这样做?)。取而代之的是,您可以使用大量的选择(例如999999
),这些选择根据设计不会显示在中y
。有关更多详细信息,请参考下面“参考”部分中共享的链接。
import numpy as np
x = [1, 2, 3, 5, 8, 13]
y = [12, 34, 56, 0, 78, 0]
# cannot use np.nan with uint32 as np.nan is treated as a float
# choose some large value instead: 999999
z = np.ones(max(x)+1).astype(np.uint32) * 999999
z[x] = y
z
# array([999999, 12, 34, 56, 999999, 0, 999999, 999999,
# 78, 999999, 999999, 999999, 999999, 0], dtype=uint32)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句