我一直很难在网上找到这个问题的答案,所以我想我应该查询一下Stack Overflow。
我举个例子:
v = np.array([
np.array([1, 1]),
np.array([1, 2]),
np.array([1, 3]),
np.array([1, 4]),
np.array([1, 5]),
np.array([2, 1]),
np.array([2, 2]),
np.array([2, 3]),
np.array([3, 1]),
np.array([3, 2]),
np.array([3, 3]),
np.array([3, 4]),
np.array([4, 1]),
np.array([4, 2]),
np.array([4, 3]),
np.array([4, 4]),
np.array([4, 5]),
np.array([4, 6]),
])
k = np.split(v[:, 1], np.unique(v[:, 0], return_index=True)[1][1:])
# output below
[
np.array([1,2,3,4,5]),
np.array([1,2,3]),
np.array([1,2,3,4]),
np.array([1,2,3,4,5,6])
]
我的目标是选择输出列表中每个数组的第一个和最后一个元素。我想做的是:
k = np.array(k, dtype=object)
new_k = (([:, 0], [:, -1]))
但是,唉,这是不可能的。也许有一种方法可以重写创建k
的行,使其只包含第一个和最后一个项?
请注意,我试图在没有列表解析、定义函数或循环的情况下完成这一任务--只使用“vanilla”numpy。如果这是不可行的,任何方向的下一个最有效的方式来完成这将是伟大的。
1条答案
按热度按时间klsxnrf11#
np.unique
操作选择第一次出现的值。对正常数组这样做意味着它选择每组的第一个,对反向数组这样做意味着它选择每组的最后一个。这给出了期望的结果,