arrays - 如何打印每个子数组的最后一个值(Numpy)
问题描述
我已经设法在上面的数组中创建了一个综合列表,但是,如果不创建新的 for 循环,我无法只打印每个子数组的最后一个元素。有人可以解释一下如何组合这两个循环吗?
import numpy as np
b = np.array([[[0.55867166, 0.06210792, 0.08147297],
[0.82579068, 0.91512478, 0.06833034]],
[[0.05440634, 0.65857693, 0.30296619],
[0.06769833, 0.96031863, 0.51293743]],
[[0.09143215, 0.71893382, 0.45850679],
[0.58256464, 0.59005654, 0.56266457]],
[[0.71600294, 0.87392666, 0.11434044],
[0.8694668 , 0.65669313, 0.10708681]],
[[0.07529684, 0.46470767, 0.47984544],
[0.65368638, 0.14901286, 0.23760688]]])
list5 = [[[e for e in r if e <= 0.5] for r in s] for s in b]
print(list5)
for i in list5:
print((i[-1]))
解决方案
您应该显示此代码的结果!我们中的大多数人无法在精神上运行代码(或者懒得这样做)。
In [46]: b.shape
Out[46]: (5, 2, 3)
In [47]: list5 = [[[e for e in r if e <= 0.5] for r in s] for s in b]
In [48]: list5
Out[48]:
[[[0.06210792, 0.08147297], [0.06833034]],
[[0.05440634, 0.30296619], [0.06769833]],
[[0.09143215, 0.45850679], []],
[[0.11434044], [0.10708681]],
[[0.07529684, 0.46470767, 0.47984544], [0.14901286, 0.23760688]]]
In [49]: for i in list5:
...: print((i[-1]))
...:
[0.06833034]
[0.06769833]
[]
[0.10708681]
[0.14901286, 0.23760688]
结果具有不同长度的列表 - 0,1,2。这表明不值得尝试消除循环。或者至少需要一些横向思考来解决这个问题。
我可以替换最里面的迭代
In [52]: list6 = [[r[r<=0.5] for r in s][-1] for s in b]
In [53]: list6
Out[53]:
[array([0.06833034]),
array([0.06769833]),
array([], dtype=float64),
array([0.10708681]),
array([0.14901286, 0.23760688])]
而且由于您只想要中间维度的最后一个子列表:
In [54]: [r[r<=0.5] for r in b[:,-1,:]]
Out[54]:
[array([0.06833034]),
array([0.06769833]),
array([], dtype=float64),
array([0.10708681]),
array([0.14901286, 0.23760688])]
推荐阅读
- php - Laravel Nova - 在相关资源上隐藏更新图标(编辑附件)
- dart - 从 Futures 和 catchError 返回
- symfony - 我可以将 web 目录和其他文件夹放在 symfony 的不同目录中吗
- javascript - 加载在网页上的另一个脚本中初始化的数组时出现问题
- wso2 - WSO2 IS 中的动态资源支持用于访问控制
- php - 如何将 bind_param 与非变量绑定
- python - foreginkey 的过滤查询集
- c# - 使用类名字符串来新建一个类
- selenium - 如何使用 selenium firefoxdriver 保存 cookie
- powershell - 测量对象以将整数对象相加