Return 掩码数组作为简单数组,掩码值为 None
Return masked array as simple array with masked values as None
我需要通过另一个数组 b
满足的条件来屏蔽数组 a
。
例如 a
中的值只有在 b
相同位置的值等于 0 时才应保留,否则 return 与 None
相同。例如:
a = np.array([2, 2, 4, 0, 4, 3, 3, 3, 1, 2])
被
掩盖了
b = np.array([0, 0, 0, 1, 0, 3, 0, 5, 0, 0])
到return
c: [2, 2, 4, None, 4, None, 3, None, 1, 2]
我试过了
to_change = np.ma.masked_where(travel_time!=0, new_subareas)
但是这个 returns:
masked_array(data=[2, 2, 4, --, 4, --, 3, --, 1, 2],
mask=[False, False, False, True, False, True,
False, True, False, False],
fill_value=999999)
但我找不到任何东西 return 类似于 c
的示例。
我需要完全在 numpy
中完成一些事情,并且没有 for 循环或 if 语句,因为这将用于非常大的数组,以提高速度。
我错过了什么?
masked_array
s 有更多的开销,因为对这些的操作隐式忽略掩码值(而是处理其他所有内容)。
如果您不需要那种功能,您可以只使用 np.where
,但您可能会冒着将数组转换为 object
.
的风险
np.where(b == 0, a, None)
array([2, 2, 4, None, 4, None, 3, None, 1, 2], dtype=object)
我建议用 NaN
代替?
np.where(b == 0, a, np.nan)
array([ 2., 2., 4., nan, 4., nan, 3., nan, 1., 2.])
保留数字类型。
如果你需要一个in-place的解决方案,你可以将a
转换为float
,然后使用np.where
。
此处需要进行浮点数转换,因为 np.nan
是 float
。
a = np.array([2, 2, 4, 0, 4, 3, 3, 3, 1, 2])
b = np.array([0, 0, 0, 1, 0, 3, 0, 5, 0, 0])
a = a.astype(float)
a[np.where(b!=0)] = np.nan
# array([ 2., 2., 4., nan, 4., nan, 3., nan, 1., 2.])
我需要通过另一个数组 b
满足的条件来屏蔽数组 a
。
例如 a
中的值只有在 b
相同位置的值等于 0 时才应保留,否则 return 与 None
相同。例如:
a = np.array([2, 2, 4, 0, 4, 3, 3, 3, 1, 2])
被
掩盖了b = np.array([0, 0, 0, 1, 0, 3, 0, 5, 0, 0])
到return
c: [2, 2, 4, None, 4, None, 3, None, 1, 2]
我试过了
to_change = np.ma.masked_where(travel_time!=0, new_subareas)
但是这个 returns:
masked_array(data=[2, 2, 4, --, 4, --, 3, --, 1, 2],
mask=[False, False, False, True, False, True,
False, True, False, False],
fill_value=999999)
但我找不到任何东西 return 类似于 c
的示例。
我需要完全在 numpy
中完成一些事情,并且没有 for 循环或 if 语句,因为这将用于非常大的数组,以提高速度。
我错过了什么?
masked_array
s 有更多的开销,因为对这些的操作隐式忽略掩码值(而是处理其他所有内容)。
如果您不需要那种功能,您可以只使用 np.where
,但您可能会冒着将数组转换为 object
.
np.where(b == 0, a, None)
array([2, 2, 4, None, 4, None, 3, None, 1, 2], dtype=object)
我建议用 NaN
代替?
np.where(b == 0, a, np.nan)
array([ 2., 2., 4., nan, 4., nan, 3., nan, 1., 2.])
保留数字类型。
如果你需要一个in-place的解决方案,你可以将a
转换为float
,然后使用np.where
。
此处需要进行浮点数转换,因为 np.nan
是 float
。
a = np.array([2, 2, 4, 0, 4, 3, 3, 3, 1, 2])
b = np.array([0, 0, 0, 1, 0, 3, 0, 5, 0, 0])
a = a.astype(float)
a[np.where(b!=0)] = np.nan
# array([ 2., 2., 4., nan, 4., nan, 3., nan, 1., 2.])