在另一个数组中保存bidimensional numpy数组的行

时间:2017-11-21 17:40:09

标签: python arrays numpy

我有一个二维np数组V(100000x50)。我想创建一个新的数组V_tgt,其中我只保留V的某些行,因此维度将是(ix50)。这可能很容易,但我尝试了不同的东西,似乎只保存了50个元素中的第一个。我的代码如下:

V_tgt = np.array([])
for i in IX_items:
    if i in IX_tgt_items:
        V_tgt=np.append(V_tgt, V[i])

我尝试使用插入和删除等功能,但它不起作用。如何保存所有值并创建具有正确尺寸的数组?任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:0)

从你的评论中我假设你有一些目标索引列表(在我的例子tgt_idx1tgt_idx2中),告诉你从V中取出哪些元素。你可以这样做:

import numpy as np

V = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
tgt_idx1 = np.array([1, 2, 3])
tgt_idx2 = np.array([1, 3])


mask = []
for i, elem in enumerate(V):
    inTargets = i in tgt_idx1 and i in tgt_idx2
    mask.append(inTargets)
print mask

V_tgt = V[mask]
print V_tgt

打印

[False, True, False, True]
[[ 4  5  6]
 [10 11 12]]

答案 1 :(得分:0)

让我们先解决问题。使用初始arraya):

a = np.array([45, 29, 76, 23, 76, 98, 21, 63])

index arrays

i1 = np.array([1, 3, 5, 7, 9])
i2 = np.array([0, 1, 2, 3, 4])

然后我们可以使用简单的list理解来获取aindexesi1的{​​{1}}元素:

i2

非常可读并输出:

np.array([e for i, e in enumerate(a) if i in i1 and i in i2])

我相信您可以根据您array([29, 23]) 提供的variables进行调整。

答案 2 :(得分:0)

np.append的性能可能会破坏这一点,为什么不创建两个索引的新重叠,然后是子集:

#using @Joe Iddons data
a = np.array([45, 29, 76, 23, 76, 98, 21, 63])
i1 = np.array([1, 3, 5, 7, 9])
i2 = np.array([0, 1, 2, 3, 4])

然后找到i1和i2的交点:

indices = np.intersect1d(i1,i2)

和子集:

a[indices]
array([29, 23])