首页 > 解决方案 > 如何打印每个子数组的最后一个值(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]))

标签: arrayspython-3.xnumpylist-comprehension

解决方案


您应该显示此代码的结果!我们中的大多数人无法在精神上运行代码(或者懒得这样做)。

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])]

推荐阅读