gpt4 book ai didi

python - 将一行插入 NumPy 数组

转载 作者:行者123 更新时间:2023-12-01 03:57:20 31 4
gpt4 key购买 nike

我有:

A = np.array([[0,1,1],[0,3,2],[1,1,1],[1,5,2]])

其中 NumPy 数组根据第一个元素排序,然后根据第二个元素排序,依此类推。

我想将 [1,4,10] 插入到 A 中,这样输出将是:

A = array([[0,1,1],[0,3,2],[1,1,1],[1,4,10][1,5,2]])                 

我该怎么做?

最佳答案

首先,将新的一维数组堆叠为最后一行 np.vstack -

B = np.vstack((A,[1,4,10]))

现在,为了维护每行考虑第一个元素、然后第二个元素等的优先顺序,假设每行作为一个索引元组,然后获取排序后的索引。这可以通过 np.ravel_multi_index(B.T,B.max(0)+1) 来实现。然后,使用这些索引重新排列 B 的行并获得所需的输出。因此,最终的代码将是 -

out = B[np.ravel_multi_index(B.T,B.max(0)+1).argsort()]

似乎有一个替代方案 np.lexsort获得尊重该优先级的排序索引,但以相反的方式进行排序。因此,我们需要按行反转元素的顺序,使用 lexsort ,然后获取排序后的索引。然后,这些索引可以用于索引 B,就像之前的方法一样,并为我们提供输出。因此,np.lexsort 的替代最终代码将是 -

out = B[np.lexsort(B[:,::-1].T)]

示例运行 -

In [60]: A
Out[60]:
array([[0, 1, 1],
[0, 3, 2],
[1, 1, 1],
[1, 5, 2]])

In [61]: B = np.vstack((A,[1,4,10]))

In [62]: B
Out[62]:
array([[ 0, 1, 1],
[ 0, 3, 2],
[ 1, 1, 1],
[ 1, 5, 2],
[ 1, 4, 10]]) # <= New row

In [63]: B[np.ravel_multi_index(B.T,B.max(0)+1).argsort()]
Out[63]:
array([[ 0, 1, 1],
[ 0, 3, 2],
[ 1, 1, 1],
[ 1, 4, 10], # <= New row moved here
[ 1, 5, 2]])

In [64]: B[np.lexsort(B[:,::-1].T)]
Out[64]:
array([[ 0, 1, 1],
[ 0, 3, 2],
[ 1, 1, 1],
[ 1, 4, 10], # <= New row moved here
[ 1, 5, 2]])

关于python - 将一行插入 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227266/

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