我有下面的numpy数组:
array([['apple','banana','orange'],
['car','bike','train','ship','plane','scooter'],
['red','purple']], dtype=object)
数组中的各行长度不等,我想得到每行的最后一个元素 . 我可以通过运行for循环来获得这个,但我想可能有更直接的方法 . 我最接近的(错误的解决方案)是arr [:] [ - 1]它给了我最后一行的元素和arr [np.arange(len(arr)), - 1]它会抛出'IndexError'错误 .
我想要的输出是:
array([['orange','scooter','purple']], dtype=object)
我将不胜感激任何指导 . 谢谢 .
3 回答
使用循环理解:
np.array([i[-1] for i in arr],dtype=object)
可能只是一种有效而快速的方法,特别是如果列表足够长的话 . 但是既然你要求一个非循环的解决方案,这里有一种方法可以使用np.concatenate获得一个扁平化的版本,然后使用适当的索引将其索引到每个列表的最终元素中 -有一个
map
运算符的使用,它几乎没有矢量化方法 .样品运行 -
请注意,如果我们想要一个对象dtype数组,我们需要在索引之前转换为这样的dtype:
np.concatenate(arr).astype(object)
.如果最快,请使用列表列表:
即使您有DataFrame或Series对象,也可以先将其转换为列表:
使用熊猫:
或者作为NumPy数组: