gpt4 book ai didi

python - 使用 Python 列表理解来匹配存在于二维数组和简单列表中的值

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:14 25 4
gpt4 key购买 nike

我正在尝试将二维数组的值与列表进行匹配,以便创建一个新的二维数组,其中包含该列表及其来自二维数组的对应值。可能用代码比用英语更容易理解......

import numpy as np

m_out = np.arange(50).reshape(25,2)
m_out_list = list(m_out[:,1])

eqn_out = range(7,17)

c_list = [(x,y) for x in eqn_out for y in m_out[:,0] if x in (m_out_list)]

print c_list

这段代码产生了我期望的答案,

[(7, 0), (7, 2), (7, 4), (7, 6), ...

但这不是我想要完成的。我希望列表理解的最后一部分(或任何其他有效的方法)做的是提供一个与 eqn_out 列表匹配的数组及其对应的唯一原始值;即

[(7,6), (9,8), (11,10), (13,12), (15,14), (17,16)]

我不确定该怎么做,如有任何建议,我们将不胜感激。

最佳答案

[编辑以将更简单的方法放在首位。]

在实践中我可能只是这样做:

In [166]: d = dict(m_out[:,::-1])
In [167]: [(k, d[k]) for k in eqn_out if k in d]
Out[167]: [(7, 6), (9, 8), (11, 10), (13, 12), (15, 14), (17, 16)]

但为了好玩,坚持使用 numpy,怎么样:

[更新:更好的 numpy 方法]:

In [15]: m_out[np.in1d(v, eqn_out)][:, ::-1]
Out[15]:
array([[ 7, 6],
[ 9, 8],
[11, 10],
[13, 12],
[15, 14],
[17, 16]])

或者我原来的 numpy 方法:

In [150]: import numpy as np
In [151]: m_out = np.arange(50).reshape(25,2)
In [152]: v = m_out[:,1]
In [153]: eqn_out = np.arange(7, 18)
In [154]: eqn_out
Out[154]: array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])

只保留我们知道的值:

In [155]: np.intersect1d(eqn_out, v)
Out[155]: array([ 7, 9, 11, 13, 15, 17])

查找它们所在的位置(假设数据已排序!!):

In [156]: v.searchsorted(np.intersect1d(eqn_out, v))
Out[156]: array([3, 4, 5, 6, 7, 8])

将这些索引用于选择目的:

In [157]: m_out[v.searchsorted(np.intersect1d(eqn_out, v))]
Out[157]:
array([[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17]])

翻转:

In [158]: m_out[v.searchsorted(np.intersect1d(eqn_out, v))][:,::-1]
Out[158]:
array([[ 7, 6],
[ 9, 8],
[11, 10],
[13, 12],
[15, 14],
[17, 16]])

关于python - 使用 Python 列表理解来匹配存在于二维数组和简单列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254885/

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