比方说,我有一个Numpy数组真值数组,其外观类似于以下内容:
truths = [True, False, False, False, True, True]
还有另一个值数组,类似于:
nums = [1, 2, 3]
我想创建一个循环,用nums数组中的下一个数字替换trues数组中的所有真值,并将所有False值替换为0。
我想结束的时候看起来像这样:
array = [1, 0, 0, 0, 2, 3]
答案 0 :(得分: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()
的“ mask”参数中。这将仅检查数组truths
的每个元素是否正确;由于我们将数组转换为类型int64
,因此它将根据需要仅替换非0的元素。
如果我们想变得更加古怪,或者需要替换一些任意值,我们将需要numpy.putmask(truths, truths==<value we want to replace>, nums)
来代替。
据我所知,如果我们想更深入地研究而不是假设我们可以轻松地将类型转换(从bool
到int64
的假设),我们可以d要么需要某种映射到其他numpy.array
的映射,我们就可以在其中进行转换。我个人这样做的方法是将numpy.array
转换为布尔型数组,我可以在其中进行这种简单的转换,但是可能会有更好的方法。
答案 1 :(得分:2)
您可以使用itertools
中的cycle
来遍历nums
列表。然后,用您的布尔值压缩它,并使用三元列表理解。
from itertools import cycle
>>> [num if boolean else 0 for boolean, num in zip(truths, cycle(nums))]
[1, 0, 0, 0, 2, 3]
答案 2 :(得分:1)
您可以在此处使用<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<location path="privacy.html">
<system.webServer>
<httpRedirect enabled="true" destination="/privacy/" httpResponseStatus="Permanent" />
</system.webServer>
</location>
<system.webServer>
<rewrite>
<rules>
<rule name="privacy" stopProcessing="true">
<match url="^privacy" />
<action type="Rewrite" url="privacy.asp" />
</rule>
</rules>
</system.webServer>
</configuration>
,因为您要循环播放。
itertools