如何打印每个子数组的最后一个值(Numpy)
How to print the last value of each subarray (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])]
我已经设法在上面的数组中创建了一个综合列表,但是,如果不创建新的 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])]