python - 如何在多个条件下向 np.array 添加元素?
问题描述
我需要帮助来解决以下问题:
首先创建一个与usingf
具有相同形状(即 2x3x5)的空数组。填充 中的值。对于 中的每个值:d
np.empty
f
d
- 如果大于
d_min
但小于,则将25d_mean
分配给 中的相应值。f
- 如果 in 的值
d
大于d_mean
但小于,则将75d_max
分配给in 的对应值。f
如果一个值等于,则将50
d_mean
分配给 中的相应值。f
将0
f
分配给ford_min
in 中的相应值d
。将100
f
分配给ford_max
in 中的相应值d
。
我正在尝试使用列表推导来执行此操作,而不是 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.]]])
你能帮我找出问题吗?
解决方案
您将所有计算值附加到同一个列表中。在这种特殊情况下,您应该改为:
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)
推荐阅读
- java - 变量无法解析(if else 语句中使用的变量)
- excel - 从单列到 3X8 表
- swift - 调用 @Environment 时收到错误“类 'Environment' 不能用作属性”
- javascript - 我应该将上传功能放在 Vue 组件中的哪个位置?
- google-apps-script - 我无法访问脚本编辑器
- javascript - 从 componentDidMount 调用函数(发出 http 请求)
- javascript - 如何使用小书签通过电子邮件发送指向当前页面的链接而不覆盖选项卡的内容?
- swiftui - 从 SwiftUI 中的后退按钮中删除文本
- php - 在循环中将更多数组混合在一起
- python - “后退”按钮在带有 Kivy 的 Python 中不起作用