Python numpy:为浮点数组创建二进制掩码,而不分配中间数组
我有两个形状相同的numpy浮点数组:Python numpy:为浮点数组创建二进制掩码,而不分配中间数组,python,arrays,numpy,Python,Arrays,Numpy,我有两个形状相同的numpy浮点数组:data和mask。我想根据数据中的值填充掩码的值。当数据中的元素值等于“可接受值”(见下文)之一时,则掩码中的相应项应设置为1.0,否则应设置为0.0 有两种可能的情况: 可接受的值都是有限数 可接受值为除0.0以外的所有有限数 如何在没有任何额外阵列分配的情况下实现上述目标?对于第一个场景,我可以使用numpy.isfinite和out参数。但是第二种情况呢numpy。其中无法使用,因为它需要创建索引的中间数组。我能想到的唯一解决方案是将numpy数组传
data
和mask
。我想根据数据
中的值填充掩码
的值。当数据
中的元素值等于“可接受值”(见下文)之一时,则掩码
中的相应项应设置为1.0,否则应设置为0.0
有两种可能的情况:
numpy.isfinite
和out
参数。但是第二种情况呢numpy。其中
无法使用,因为它需要创建索引的中间数组。我能想到的唯一解决方案是将numpy数组传递给C并在那里执行。然而,我想知道是否也有一个纯粹的numpy解决方案
谢谢。也许使用
np.isfinite
函数的where
参数过滤掉等于零的元素可以达到您想要的效果?但是,它比使用其他布尔数组的其他选项慢
import numpy as np
# Dummy data
data = np.tile([0,np.inf,2,3,4,5], 10000000).astype(float)
mask = np.zeros_like(data, dtype = float)
# First scenario
np.isfinite(data, out = mask)
# Second scenario
mask = np.zeros_like(data, dtype = float)
np.isfinite(data, out = mask, where = data != 0)
# Faster method using intermediate boolean arrays
np.bitwise_and(np.isfinite(data), data != 0, out = mask)
也许使用
np.isfinite
函数的where
参数过滤掉等于零的元素可以达到您想要的效果?但是,它比使用其他布尔数组的其他选项慢
import numpy as np
# Dummy data
data = np.tile([0,np.inf,2,3,4,5], 10000000).astype(float)
mask = np.zeros_like(data, dtype = float)
# First scenario
np.isfinite(data, out = mask)
# Second scenario
mask = np.zeros_like(data, dtype = float)
np.isfinite(data, out = mask, where = data != 0)
# Faster method using intermediate boolean arrays
np.bitwise_and(np.isfinite(data), data != 0, out = mask)
你需要的不是布尔掩码吗?理想情况下,
掩码
数组也应该是一个浮点数组(只是在我的帖子中阐明了这一点)。尽管如此,我并不认为不同类型的掩码数组的解决方案会有很大差异。数组创建是否真的是算法中的瓶颈?为什么?您是遇到了内存错误,还是只是希望节省时间?布尔掩码不是您所需要的吗?理想情况下,掩码
数组也应该是浮点数组(在我的帖子中对此进行了澄清)。尽管如此,我并不认为不同类型的掩码数组的解决方案会有很大差异。数组创建是否真的是算法中的瓶颈?为什么?您是遇到内存错误,还是只是希望节省时间?这两种方法都会创建临时数据!=0
array。如果mask
是bool
dtype,则所有方法都会更快。@hpaulj您当然是对的。不过,他在问题中为掩码数组指定了一个float
dtype。这两种方法都创建了一个临时data!=0
array。如果mask
是bool
dtype,则所有方法都会更快。@hpaulj您当然是对的。不过,他在问题中为掩码数组指定了一个float
dtype。