假设我有一个类似于以下内容的 Numpy 真值数组:
truths = [True, False, False, False, True, True]
我还有另一个值数组,看起来像这样:
nums = [1, 2, 3]
我想创建一个循环,将 truths 数组中的所有真值替换为 nums 数组中的下一个数字,并将所有 False 值替换为 0。
我想以这样的方式结束:
array = [1, 0, 0, 0, 2, 3]
最佳答案
我会推荐 numpy.putmask()
.因为我们是从 bool
类型转换而来的至 int64
,我们需要先做一些转换。
首先,初始化:
truths = np.array([ True, False, False, False, True, True])
nums = np.array([1, 2, 3])
然后我们根据掩码进行转换和替换(如果 truth
的元素为 True):
truths = truths.astype('int64') # implicitly changes all the "False" values to 0
numpy.putmask(truths, truths, nums)
最终结果:
>>> truths
array([1, 0, 0, 0, 2, 3])
注意我们只是传入了truths
进入 numpy.putmask()
的“掩码”参数.这将简单地检查数组 truths
的每个元素是否是真实的;因为我们将数组转换为类型 int64
,它将根据需要仅替换非 0 的元素。
如果我们想要更迂腐,或者需要替换一些任意值,我们需要 numpy.putmask(truths, truths==<value we want to replace>, nums)
反而。
如果我们想要更迂腐,而不是假设我们可以轻松地转换类型(就像我们可以从 bool
到 int64
),据我所知,我们要么需要对不同的 numpy.array
进行某种映射我们可以在哪里进行转换。我个人这样做的方式是转换我的 numpy.array
转换成一些 bool 数组,我可以在其中进行这种简单的转换,但可能有更好的方法。
关于python - 在python中循环遍历真值数组并用另一个数组中的组件替换真值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56843898/