首页 > 解决方案 > 如何在多个条件下向 np.array 添加元素?

问题描述

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

首先创建一个与usingf具有相同形状(即 2x3x5)的空数组。填充 中的值。对于 中的每个值:dnp.emptyfd

我正在尝试使用列表推导来执行此操作,而不是 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.]]])

你能帮我找出问题吗?

标签: pythonpython-3.xnumpyfor-looplist-comprehension

解决方案


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

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)

推荐阅读