我在使用Numbers[(Numbers<=0).argmax():] = 0
函数时遇到了问题,如果条件满足,它应该将它后面的所有元素都变成零,但是如果条件不满足,它会将所有数组元素变成零。如何解决此问题。如果不满足Numbers<=0
条件,则不应更改数组
满足条件为-35.15610151的阵列:
Numbers = np.array([123.6, 123.6 , 123.6, 110.3748, 111.6992976,
102.3165566, 97.81462811 , 89.50038472 , 96.48141473 , 90.49956702,
88.59907611 , 77.96718698, 61.51611052, 56.84088612, 55.36302309,
54.69866681, 56.44902415 , 59.49727145, 42.12406819, 27.42276839,
33.86711896, 32.10602877, -35.15610151, 32.34361339 , 29.20628289])
Numbers[(Numbers<=0).argmax():] = 0
输出:
[123.6 123.6 123.6 110.3748 111.6992976
102.3165566 97.81462811 89.50038472 96.48141473 90.49956702
88.59907611 77.96718698 61.51611052 56.84088612 55.36302309
54.69866681 56.44902415 59.49727145 42.12406819 27.42276839
33.86711896 32.10602877 0. 0. 0. ]
没有满足条件的数组,将-35.1561015变为+35.1561015:
Numbers = np.array([123.6, 123.6 , 123.6, 110.3748, 111.6992976,
102.3165566, 97.81462811 , 89.50038472 , 96.48141473 , 90.49956702,
88.59907611 , 77.96718698, 61.51611052, 56.84088612, 55.36302309,
54.69866681, 56.44902415 , 59.49727145, 42.12406819, 27.42276839,
33.86711896, 32.10602877, 35.15610151, 32.34361339 , 29.20628289])
Numbers[(Numbers<=0).argmax():] = 0
输出:
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0.]
只需使用
if
就可以了,它很好地代表了意图,并且很容易理解:使用Python 3.8+,您可以在
if
中使用赋值表达式:尝试这两种方法,一种是就地分配给NumPy视图,另一种是创建一个新数组以分配给另一个变量-
或,
或,
解释-
返回
[F, F, F, T, F, F, F]
的bool数组可以看作是1和0的数组。执行求和运算最终将第一个T分配给后续元素因此,这会将数组转换为
[F, F, F, T, T, T, T]
,现在可以仅与boolean indexing
一起使用,并将视图设置为0或np.where
以获取原始元素,或基于使用~
反转布尔值将其设置为0这里的优点是,如果数组只是由False组成,这意味着没有元素满足条件,那么它只返回原始的
Numbers
本身,而不是将它们设置为0运行测试-
编辑:根据请求新建场景
相关问题 更多 >
编程相关推荐