我有一个二维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])
我尝试使用插入和删除等功能,但它不起作用。如何保存所有值并创建具有正确尺寸的数组?任何帮助都非常感谢。
答案 0 :(得分:0)
从你的评论中我假设你有一些目标索引列表(在我的例子tgt_idx1
和tgt_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)
让我们先解决问题。使用初始array
(a
):
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
理解来获取a
和indexes
中i1
的{{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])