【问题标题】:Conditional formatting of arrays in Numpy PythonNumpy Python中数组的条件格式
【发布时间】:2021-05-17 11:12:12
【问题描述】:

我正在尝试创建一个函数,如果 order 的最后一个值为 1,那么代码会将 1 附加到 orders,然后将数字 20 也附加到 value 数组。如果 order 中的最后一个值为 0,则它将 1 附加到 order 并将数字 15 附加到 value

import numpy as np

order = np.array([0,1,0,0,0])
order1 = np.array([0,1,0,0,1])
value= np.array([10,55,30,3,10])

预期输出:

#if last element is equal to 1 
order = np.array([0,1,0,0,0,1])
value= np.array([10,55,30,3,10,20])

#if last element is equal to 0 
order1 = np.array([0,1,0,0,1,0])
value= np.array([10,55,30,3,10,15])

【问题讨论】:

    标签: python arrays function numpy format


    【解决方案1】:
    def extend_order_and_value(order, value, order_0_extensors = (1, 20), order_1_extensors = (0, 15)):
        ## Return order and value extended by the values given in
        ## order_0_extensors or order_1_extensors depending on last order's value.
        ## the extensors have the form: (order_value, values_value) for the cases
        ## 0 or 1 as last value in order.
        
        # ensure that order and value are numpy arrays!
        order, value = np.array(order), np.array(value)
        
        if order[-1] == 0:
            order_val, value_val = order_0_extensors
        elif order[-1] == 1:
            order_val, values_val = order_1_extensors
        else:
            return order, value # return unchanged or raise error
        return np.concatenate([order, np.array([order_val])]), np.concatenate([values, np.array([values_val])])
    

    像这样使用它:

    import numpy as np
    
    order = np.array([0,1,0,0,0])
    order1 = np.array([0,1,0,0,1])
    value= np.array([10,55,30,3,10])
    
    
    new_order, new_value = extend_order_and_value(order, value)                                                                
    new_order
    ## array([0, 1, 0, 0, 0, 1])
    new_value
    ## array([10, 55, 30,  3, 10, 20])
    
    new_order1, new_value1 = extend_order_and_value(order1, value)                                                               
    new_order1
    ## array([0, 1, 0, 0, 1, 0])
    new_value1
    ## array([10, 55, 30,  3, 10, 15]))
    
    

    【讨论】:

    【解决方案2】:

    使用if-else

    import numpy as np
    
    order = np.array([0,1,0,0,0])
    order1 = np.array([0,1,0,0,1])
    value= np.array([10,55,30,3,10])
    
    to_be_appended = None
    
    if order[-1] == 0:
        to_be_appended = 1
        value = np.append(value, 15)
    elif order[-1] == 1:
        to_be_appended = 0
        value = np.append(value, 20)
    
    order = np.append(order, to_be_appended)
    
    print(order, value)
    

    注意:如果需要附加 id,那么我认为应该使用 list,因为 np.append 每次都会创建一个新数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2014-04-21
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多