【问题标题】:How do you print elements that are less than a variable from a numpy array如何从 numpy 数组中打印小于变量的元素
【发布时间】:2020-02-27 14:58:48
【问题描述】:

嗨,我对 python 还很陌生,一个作业要求我打印小于 numpy 数组中的变量的元素。

我制作了一个 20x10 的 numpy 数组,由 -5 到 50 之间的随机整数组成

x = np.random.randint (-5, 50, (20, 10))
x

array([[17, 23, 15, 13, -1, 17, 30, 14,  2,  3],
   [ 8,  0, -5,  3, 10, 10, 48,  6, -1, 34],
   [23, 40, 21,  5, 47, 41, 44, 22, 46, 30],
   [36, 13, 48, 29, 46, 25, 48, 38, 13, 40],
   [18, -4,  1, 37, 48, 43, 25, 11, 21, 30],
   [44, 37,  4, 39,  8,  1, 33, 34,  3,  8],
   [ 2, 11, 17, 10, 20,  3, 30,  1, 12,  2],
   [15, 20, -3, 11, 45, 40, 18, 19, -1, 31],
   [39, 44, 18, 25, 49, 20, 15, 28, 32, 18],
   [22, 24, 28, 46, 48, 46, 17, 49,  2, 36],
   [44,  4, 49, -5, 14, 31, 12, 15, 48, 43],
   [-2, 37, -4, 15, 31, -1, 11, 43, 42,  5],
   [40, 35, 25, 22, 38, 26, 15,  1,  4, 22],
   [42, 30, 14,  7, 13, 44,  5, 29, 28, 38],
   [-2,  7, 31, -4, 44, -5, 34, 19, 31, 30],
   [ 0,  1, -2, 29, 35, 28, 23, -1, 21, 27],
   [40, 46,  4, 48,  0, 28,  2, 25,  3, 49],
   [15,  2, -2, 16, 22, 39, -2, 33, 15,  2],
   [14, 26, -5,  0, 22, 38, 25,  4, 14,  2],
   [16, 32, 23,  3, 38, 41, -5, 35, 46, 33]])

以上是结果。现在我想打印每行中少于 5 个的元素的数量。

我做到了

print (x[0, :] < 5)

[False False False False  True False False False  True  True]

结果如上所示,但我想要它显示小于 5 的元素数量。我希望它给我 3,因为有 3 个元素。

谁能帮我解决这个问题?谢谢

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    可以将np.sum 用于bool 类型的数组,例如您的。所以,起初我尝试了以下方法:

    [np.sum(n<5) for n in x]
    

    这给了我一个列表[3, 4, 0, 0, 2, 3, 4, 2, 0, 1, 2, 3, 2, 0, 3, 4, 4, 4, 4, 2],这是正确的,但不好的是您需要避免在numpy 操作中进行列表推导。这是在numpy 中执行此操作的最佳方法:

    np.sum(x<5, axis=1)
    

    此命令从x 中生成bool 数组,然后为沿y 轴(轴号1)的每一行计算True

    【讨论】:

    • 非常感谢你,这就是我正在寻找的答案
    • 嗨,如果你不介意我再问一次。为什么你给 np.sum(x=0) and (x
    • x&lt;5 是一个掩码数组。它包含Trues 和Falses。这种数组不支持and 运算符,这与布尔值TrueFalse 不同。尝试改用arr1 &amp; arr2np.logical_and(arr1, arr2)
    【解决方案2】:

    您可以使用布尔掩码来索引数组,然后计算元素。或者,您可以使用numpy.where()。与您的方法类似,它会给您一个满足特定条件的布尔掩码。

    你的例子:

    indices = numpy.where(x < 3)
    values_greater_than_3 = x[indices]
    count = len(values_greater_than_3)
    print(count)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 2019-07-22
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      相关资源
      最近更新 更多