python - 找到条件真实的第一层
问题描述
使用这两个示例 numpy 数组:
dis = np.array([[[40,42,44],
[41,43,45],
[41.5,43.5,45.5]],
[[35,37,39],
[36,38,40],
[36.5,38.5,40.5]],
[[30,32,34],
[31,33,35],
[31.5,33.5,35.5]],
[[22,24,26],
[23,25,27],
[23.5,25.5,27.5]]])
hd = np.array([[[36.6, 37.4, 38.3],
[37.1, 39.0, 37.8],
[34.0, 32.0, 30.4]],
[[36.5, 37.3, 38.2],
[37.0, 38.9, 37.7],
[33.9, 31.9, 30.3]],
[[36.4, 37.2, 38.1],
[36.9, 38.8, 37.6],
[33.8, 31.8, 30.2]],
[[36.3, 37.1, 38.0],
[36.8, 38.7, 37.5],
[33.7, 31.7, 30.1]]])
hd
我首先取数组的平均值,使用hd_mn=hd.mean(axis=0)
which 产生:
array([[36.45, 37.25, 38.15],
[36.95, 38.85, 37.65],
[33.85, 31.85, 30.25]])
然后,使用这个数组,我想检索一个二维数组,其中包含hd_mn
大于的第一个索引dis
。所以换句话说,我会得到一个如下的数组:
[[1, 1, 1],
[1, 1, 2],
[2, 3, 3]]
例如,位置 (0, 0) of 的值 36.45 在第 0hd_mn
层中的相同位置小于 40,但在下一层中大于 35。是否有单行执行此操作?
解决方案
您直接使用大于比较器,然后ndarray.sum
在此处使用布尔值。
(dis > hd_mn).sum(0)
array([[1, 1, 2],
[1, 1, 2],
[2, 3, 3]])
细节
dis > hd_mn
array([[[ True, True, True], # --\
[ True, True, True], # |-> dis[0] > hd_mn
[ True, True, True]],# --/
[[False, False, True], # --\
[False, False, True], # |-> dis[1] > hd_mn
[ True, True, True]],# --/
[[False, False, False], # --\
[False, False, False], # |-> dis[2] > hd_mn
[False, True, True]],# --/
[[False, False, False], # --\
[False, False, False], # |-> dis[3] > hd_mn
[False, False, False]]]) # --/
推荐阅读
- python - 球面到笛卡尔坐标转换器
- angular - 如何在 Ionic 中使用全局 OT 变量
- unity3d - Unity/C# - 用于应用 3D 旋转的现有 API?
- javascript - Leaflet - 标记重复,removeLayer,clearLayers 只隐藏标记
- java - 从 S3 事件触发 AWS EMR Spark 作业
- python - Python中首次出现的重复字符
- android - Tableview Xamarin 表单
- javascript - Jquery 每个和 attr
- java - CLI 和 IDE 的 JavaFX maven 示例,有什么区别?
- rust - Rust 中出现“无法从在此上下文中绑定的更高级别特征中提取关联类型”的错误