a=
[[43655, 1428, 0, 2554]
[44580, 1428, 0, 2555]
[44930, 1428, 0, 2556]
[47708, 1428, 0, 2557]]
b=
[[41641, 1428, 0, 2554]
[44075, 1428, 0, 2555]
[44901, 1428, 1, 2556]
[45377, 1428, 0, 2557]
[48056, 1428, 0, 2558]]
New b=
[[41641, 1428, 0, 2554]
[44075, 1428, 0, 2555]
[44901, 1428, 1, 2556]
[45377, 1428, 0, 2557]
我有两个不等行的numpy数组。例如。数组a
有4行,而数组b
有5行
编辑:数组中的行数' b'大于数组' a'。 [:,3]的每个元素都在b [:,3]中。是否有任何函数只提取b [:,3] = a [:,3]
答案 0 :(得分:1)
您可以通过执行a[:-1]
因此,您可以通过执行省略数组的最后一行;
a[:,3]
b[:-1,3]
答案 1 :(得分:1)
您可以在列表推导中使用zip
和np.equal
比较第3列的元素,然后将结果转换为numpy数组,并从数组b
获取所需的行。
>>> b[np.array([np.equal(*I) for I in zip(a[:,3],b[:,3])])]
array([[41641, 1428, 0, 2554],
[44075, 1428, 0, 2555],
[44901, 1428, 1, 2556],
[45377, 1428, 0, 2557]])
如果订单对您不重要,您可以使用np.in1d
:
>>> b[np.in1d(b[:,3],a[:,3])]
array([[41641, 1428, 0, 2554],
[44075, 1428, 0, 2555],
[44901, 1428, 1, 2556],
[45377, 1428, 0, 2557]])
>>> a=np.array([[100, 1], [101, 4], [106, 6], [104, 10]])
>>> b= np.array([[ 1, 1], [ 2, 2], [ 3, 3], [ 4, 4], [ 5, 5], [ 6, 6], [ 7, 7], [ 8, 8], [ 9, 9], [10, 10]])
>>>
>>> b[np.in1d(b[:,1],a[:,1])]
array([[ 1, 1],
[ 4, 4],
[ 6, 6],
[10, 10]])
答案 2 :(得分:0)
如果您不知道b
比a
长多少,那么您可以使用
b[:a.shape[0]]
这将获取足够的b
行以与a
进行比较。
所以要抓住你的例子中的特定列,它将是
b[:a.shape[0], 3]
此技术甚至可以在另一个方向上工作(如果b
小于a
)。