【问题标题】:How to add elements to np.array with several conditions?如何在多个条件下向 np.array 添加元素?
【发布时间】:2019-08-14 20:27:29
【问题描述】:

我需要帮助来解决以下问题:

首先使用np.empty 创建一个与d 具有相同形状(即2x3x5)的空数组f。 填充f 中的值。对于d 中的每个值:

  • 如果大于d_min但小于d_mean,则将25赋给f中的对应值。
  • 如果d中的值大于d_mean但小于d_max,则将75赋给f中的对应值。
  • 如果值等于d_mean,则将50分配给f中的对应值。

  • d 中为d_min 分配0f 中的相应值。

  • d 中的d_max 分配100f 中的相应值。

我正在尝试使用列表推导来执行此操作,而不是 for 循环。

这就是我所做的:

import numpy as np
f = np.empty([2,3,5])
f1 = [25 if d_min<item<d_mean else 75 if d_mean<item< d_max else 0 if item == d_min else 100 for out_list in d for in_list in out_list for item in in_list]
print(f1)

这是我得到的:

[75, 75, 25, 25, 25, 25, 75, 75, 75, 25, 25, 100, 25, 25, 25, 75, 75, 75, 25, 75, 75, 75, 75, 25, 0, 25, 75, 75, 25, 75]

最终的结果应该是这样的:

array([[[ 75.,  75.,  75.,  25.,  75.],
        [ 75.,  75.,  25.,  25.,  25.],
        [ 75.,  25.,  75.,  75.,  75.]],

       [[ 25.,  25.,  25.,  25., 100.],
        [ 75.,  75.,  75.,  75.,  75.],
        [ 25.,  75.,   0.,  75.,  75.]]])

你能帮我找出问题吗?

【问题讨论】:

    标签: python python-3.x numpy for-loop list-comprehension


    【解决方案1】:

    您将所有计算值附加到同一个列表中。在这种特殊情况下,您应该改为:

    f1 = [[[25 if d_min<item<d_mean else 75 if d_mean<item< d_max else 0 if item == d_min else 100 for item in in_list] for in_list in out_list] for out_list in d]
    

    你也可以使用 numpy 比较和加法来做同样的计算:

    f1 = 25 * (d > d_min) * (d < d_mean) + 75 * (d < d_max) * (d > d_mean) + 0 * (d == d_min) + 100 * (d == d_max)
    

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 2013-09-27
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2015-11-05
      • 1970-01-01
      相关资源
      最近更新 更多