使用数组列表中的索引从列表中获取元素

时间:2016-06-15 12:34:28

标签: python arrays list indexing

  

问题:

我有一个数组列表,例如:

a = [array([0, 4]), array([1, 3, 2])]

从另一个变量X,我想取两个子集,这些子集由a中每个数组中的索引选择。

X = [0.1, 0.7, 0.9, 0.2, 0.3] 

我现在想要的是:

result_1 = [0.1, 0.3]
result_2 = [0.7, 0.2, 0.9]

我的解决方案是使用for循环,例如:

def getresult(X, indices):
     result = []
     for i in indices:
          result.append(X[i])
     return result

这很好用:

getresult(X, a[0])
[0.1, 0.3]

我以前的编程经验表明,有一种更加美观和简单的方法可以做到这一点。 最好有人知道不需要循环的解决方案。

  

背景/应用

背景:参数优化的交叉验证。

我有一个list包含数据点,例如

X = [0.1, 0.7, 0.9, 0.2, 0.3]

现在我想重复从该列表中取出z个样本(实际上比这个例子大得多)。因此我创建了一个新变量:

indices = np.arange(0,len(X),1)

HERE: [0, 1, 2, 3, 4]

然后我随机播放并创建nfold样本:

np.random.shuffle(indices)        
nfold_indices = np.array_split(indices,nfolds)

HERE with nfolds = 2: nfold_indices = [array([0, 4]), array([1, 3, 2])]

3 个答案:

答案 0 :(得分:1)

return [X[i] for i in indices]可行。

答案 1 :(得分:0)

我的第一次尝试,基本上遵循你以更紧凑的方式做事的方式是:

result1, result2 = [ [X[ii] for ii in array] for array in a]

如果你不愿意将X转换为numpy数组,你可以这样做:

X = np.array([ 0.1,  0.7,  0.9,  0.2,  0.3])
result1, result2 = X[a[0]], X[a[1]]

但是这有一个问题,它不能很好地概括为一个以上的几个数组。即使有些人会讨厌我使用lambda,另一种做得更好的紧凑方式是:

results = map(lambda x: X[x], a)

答案 2 :(得分:0)

如果Severity Code Description Project File Line Suppression State Error CS0012 The type 'Member' is defined in an assembly that is not referenced. You must add a reference to assembly 'App.DAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. App.CoreServices C:\My Work\Credit Union Application\CreditSolutionApp\App.CoreServices\CoreServices\MembershipCore\MembershipCore.cs 23 Active 的索引不在a中,请使用列表推导,默认为安全性:

X

因此,如果您有一个包含超出范围索引的任意数组:

a = [array('i', [0, 4]), array('i', [1, 3, 2])]
X = [0.1, 0.7, 0.9, 0.2, 0.3] 

result = [[(X[i:]+[0])[0] for i in o] for o in a]
#                  ^ default
# [[0.1, 0.3], [0.7, 0.2, 0.9]]

您的代码不会中断