【问题标题】:Formatting and summing up numbers with arrays用数组格式化和求和数字
【发布时间】:2021-06-02 14:21:46
【问题描述】:

我正在尝试计算T_Sum 值,以便对于大于Numbers 中的Vals 值的值,它只会添加到该元素的Vals 值。比如Vals的第一个元素是60,而Numbers内的所有值都大于60(一共11个),所以结果是60 * 11。如果Vals的值是105,则有5个大于 105 的元素,因此结果将为 525。如果没有 for 循环,我该如何做到这一点?

Vals = np.arange(start=60, stop=105, step=5)
Numbers = np.array([123.6, 130, 150, 110.3748, 111.6992976,
 102.3165566, 97.81462811, 89.50038472, 96.48141473, 90.49956702, 65])

我的尝试

T_Sum = np.ma.masked_array(np.repeat(Numbers[None,:],Vals.size,0),mask=[Numbers<Vals[:,None]]).sum(-1).data

预期输出

[660, 650, 700, 750, 800, 850, 810, 760, 600, 525]

【问题讨论】:

  • '有5个元素大于6'是什么意思?
  • 应该是 60。我更新了问题。
  • 抱歉我已经更新了,我觉得现在应该不错了。
  • 是的,修复了,抱歉,哈哈

标签: python arrays numpy


【解决方案1】:

np.arange 的结束值必须大于 105,因为它不包含结束。

Vals = np.arange(60, 106, 5)
T_Sum = (Numbers[:,None] > Vals).sum(axis=0) * Vals

【讨论】:

    【解决方案2】:

    arrange 方法不包含 stop 值,因此您的 Vals 实际上以 100 结尾,而不是像您认为的 ti 那样的 105。

    在任何情况下,这都会做你想做的事,只需要使用开始/停止值来获得你正在寻找的最终结果。

    import numpy as np
    Vals= np.arange(start=60, stop=105, step=5)
    from collections import Counter
    Numbers = np.array([123.6,       130 ,       150,        110.3748,     111.6992976,
     102.3165566,   97.81462811 , 89.50038472 , 96.48141473 , 90.49956702, 65])
    
    
    output = []
    
    for v in Vals:
        c = 0
        for n in Numbers:
            if n>v:
                c+=1
        print(f'There are {c}, values greater than {v}')
        output.append(c*v)
    
    print(output)
    

    输出

    There are 11, values greater than 60
    There are 10, values greater than 65
    There are 10, values greater than 70
    There are 10, values greater than 75
    There are 10, values greater than 80
    There are 10, values greater than 85
    There are 9, values greater than 90
    There are 8, values greater than 95
    There are 6, values greater than 100
    [660, 650, 700, 750, 800, 850, 810, 760, 600]
    

    【讨论】:

    • 我正在尝试使用一个 numpy 函数来做到这一点,因为 lops 没有得到很好的优化并且速度很慢,但无论如何感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    相关资源
    最近更新 更多