gpt4 book ai didi

python - 如何提取具有特定值的numpy数组的最后一行和第一行

转载 作者:行者123 更新时间:2023-12-04 07:54:16 27 4
gpt4 key购买 nike

我有一个 numpy 数组列表,想导出每个数组的一些行。我的 list 是:

all_data=[np.array([[1., 1., 2.], [2., 1., 4.], [3., 1., 5.], [1., 2., 4.]]),\
np.array([[3., 1., 3.], [4., 1., 4.], [3., 2., 7.], [4., 2., 1.]]),\
np.array([[0., 0., 0.], [1., 1., 1.], [3., 1., 0.], [4., 2., 4.]]),\
np.array([[2., 2., 2.], [3., 2., 1.], [4., 2., 5.], [5., 2., 4.]])]

我的 all_data 这里有四个数组(实际上它有更多)。在每个数组中,我首先想知道第二列中存在多少个唯一值或重复值。比,对于偶数数组,我想提取在第二列中具有相同值的行的最后一行。如果一行具有唯一值,我只提取该行。对于奇数组,我想提取第二列中具有相同值的行的第一行,对于具有唯一值的行,我再次提取该行。最后,我想要以下数组列表和我的输出:

[np.array([[3., 1., 5.], [1., 2., 4.]]),\
np.array([[3., 1., 3.], [3., 2., 7.]]),\
np.array([[0., 0., 0.], [3., 1., 0.], [4., 2., 4.]]),\
np.array([[2., 2., 2.]])]

我尝试了下面的代码,但根本没有成功。

extracted=[]
for i,h in enumerate (all_data):
nums, counts=np.unique(h[:,1],return_counts=True) # to find the frequency of values in second column
if i%2 ==0:
a=np.where(np.isin(h[:,1],nums).any(-1))[-1]
else:
a=np.where(np.isin(h[:,1],nums).any(-1))[0]
extracted.append (a)

我非常感谢提前提供的任何帮助。

最佳答案

arr 中获取“想要的”行(all_data 中的第 i 数组)定义以下函数:

def getRows(i, arr):
vals, inv, cnts = np.unique(arr[:, 1], return_inverse=True, return_counts=True)
rows = [inv.size - np.argmax(inv[::-1] == iCnt) - 1 if i % 2 == 0 else\
np.argmax(inv == iCnt) for iCnt in range(len(cnts))]
return arr[rows]

然后,从每个数组中获取提取的行,作为一个单独的数组从每个源数组运行以下列表理解:

extracted = [getRows(i, arr) for i, arr in enumerate(all_data)]

对于您的数据样本,结果是:

[array([[3., 1., 5.], [1., 2., 4.]]),
array([[3., 1., 3.], [3., 2., 7.]]),
array([[0., 0., 0.], [3., 1., 0.], [4., 2., 4.]]),
array([[2., 2., 2.]])]

关于python - 如何提取具有特定值的numpy数组的最后一行和第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66785467/

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