Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用argmax numpython设置数组格式_Python_Arrays_Function_Numpy_Sorting - Fatal编程技术网

使用argmax numpython设置数组格式

使用argmax numpython设置数组格式,python,arrays,function,numpy,sorting,Python,Arrays,Function,Numpy,Sorting,我在使用Numbers[(Numbers尝试这两种方法时遇到了问题,一种是就地分配给NumPy视图,另一种是创建一个新数组来分配给另一个变量- #Method 1 (Inplace assignment) Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0 解释- 返回[F,F,F,T,F,F,F]的布尔数组可以看作是一个由1和0组成的数组。执行求和运算的结果是将第一个T按比例分配给后续元素 因此,这会将数组变成[F,F,F,T,T,T,T],现在

我在使用
Numbers[(Numbers尝试这两种方法时遇到了问题,一种是就地分配给NumPy视图,另一种是创建一个新数组来分配给另一个变量-

#Method 1 (Inplace assignment)
Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
解释-

  • 返回
    [F,F,F,T,F,F,F]
    的布尔数组可以看作是一个由1和0组成的数组。执行求和运算的结果是将第一个T按比例分配给后续元素

  • 因此,这会将数组变成
    [F,F,F,T,T,T,T]
    ,现在可以与
    布尔索引一起使用
    并将视图设置为0或
    np。其中
    获取原始元素,或在使用
    ~
    反转布尔值的基础上设置为0

  • 这里的优点是,如果数组只是由False组成,这意味着没有元素满足条件,那么它只返回原始的
    数字本身,而不是将它们设置为0


  • 运行测试-

  • 具有满足条件的值

  • 只需使用
    ,如果
    ,那么它很好地代表了意图,并且很容易理解:

    smaller_equal_zero = Numbers <= 0
    if smaller_equal_zero.any():
        Numbers[smaller_equal_zero.argmax():] = 0
    

    你有没有检查过
    (数字
    np.ones(3,bool).argmax()
    是0,第一个
    True
    。更有效的是,
    n[np.logical\u或.accumulate(n>=0)]=0
    谢谢你的工作。我有没有办法实现它,这样它也可以扫描另一个数组,比如
    np.where(~(数字2)相同的代码不也适用吗?
    np.where(~)数字2为我工作。我已经编辑了我的答案,请检查。谢谢我犯了一个愚蠢的错误谢谢
    
    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.]
    
    #Method 1 (Inplace assignment)
    Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
    
    #Method 2 (Not inplace)
    np.where(~(Numbers<=0).cumsum(dtype=bool), Numbers, 0)
    
    #As an excellent suggestion by Mad Physicist!
    Numbers[np.logical_or.accumulate(Numbers >= 0)] = 0
    
    Numbers = np.array([123.6 , 123.6 ,  -123.6, 110.3748 ,  111.6992976, 102.3165566,  97.81462811])
    
    Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
    
    #array([123.6, 123.6,   0. ,   0. ,   0. ,   0. ,   0. ])
    
    Numbers = np.array([123.6 , 123.6 ,  123.6, 110.3748 ,  111.6992976, 102.3165566,  97.81462811])
    
    Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
    
    #array([123.6 , 123.6 , 123.6 , 110.3748 ,111.6992976 , 102.3165566 ,  97.81462811])
    
    Numbers1 = np.array([1.1, 2.2, 3.3, 4.4, 5.5])
    Numbers2 = np.array([1,2,-3,4,5])
    
    Numbers2 = np.where(~(Numbers2<=0).cumsum().astype(bool), Numbers1, 0)
    Numbers2
    
    array([1.1, 2.2, 0. , 0. , 0. ])
    
    smaller_equal_zero = Numbers <= 0
    if smaller_equal_zero.any():
        Numbers[smaller_equal_zero.argmax():] = 0
    
    if (smaller_equal_zero := Numbers <= 0).any():
        Numbers[smaller_equal_zero.argmax():] = 0