gpt4 book ai didi

python - 根据元素拆分 Numpy 数组,其中数组的每个元素都是唯一的

转载 作者:行者123 更新时间:2023-12-01 08:53:55 26 4
gpt4 key购买 nike

我有一个 Numpy 1D 向量,例如 x = [1, 1, 1, 2, 2, 1, 3, 3, 1]

我必须将其分割成 n 个子数组,其中每个向量必须以新值开始,并且只要值相同就继续,这样最终的答案是 [[1, 1 , 1], [2, 2], [1], [3, 3], [1]]

我确实知道我必须使用 numpy.split() 函数,但我在找到必须进行拆分的位置时遇到问题。

恳请您的帮助,感谢您的宝贵时间!

最佳答案

您只需为 numpy.split 提供分割数组所需的索引

a = np.array([1,1,1,2,2,1,3,3,1])
np.split(a, np.argwhere(np.diff(a) != 0)[:,0] + 1)
# [array([1, 1, 1]), array([2, 2]), array([1]), array([3, 3]), array([1])]
<小时/>

详细信息

使用np.diff(a)你可以得到每个连续元素之间的差异

np.diff(a)
# array([ 0, 0, 1, 0, -1, 2, 0, -2])

差值不等于0的点是元素不连续相同的点。由于您正在寻找需要进行更改的索引 np.diff(a) != 0 ,它返回:

np.diff(a) != 0
# array([False, False, True, False, True, True, False, True])

要将 bool 值转换为索引,您可以使用 np.argwhere

np.argwhere(np.diff(a) != 0)
# array([[2],[4],[5],[7]])
# since we only need this for 1d arrays
np.argwhere(np.diff(a) != 0)[:,0]
# array([2, 4, 5, 7])

您只需使用上述过程为np.split提供正确的索引

np.split(a, np.argwhere(np.diff(a) != 0)[:,0])
# [array([1, 1]), array([1, 2]), array([2]), array([1, 3]), array([3, 1])]

糟糕...索引错误...看来我们偏离了 1 个索引。没问题,只需将 np.argwhere

的结果加 +1 即可
np.split(a, np.argwhere(np.diff(a) != 0)[:,0] + 1)
# [array([1, 1, 1]), array([2, 2]), array([1]), array([3, 3]), array([1])]

关于python - 根据元素拆分 Numpy 数组,其中数组的每个元素都是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52906951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com