我有一个包含大约500个元素的列表。为了说明,我有:
list3 = [ 'a', 'b', 'c', 'a' ]
' a',' b',' c'是数组的名称:
a = np.random.normal( 0, 1, ( 500, 20 ) )
b = np.random.normal( 0, 1, ( 500, 30 ) )
c = np.random.normal( 0, 1, ( 500, 30 ) )
我想按照列表中的顺序连接列表中的数组。
所以,对于我的例子,我想获得:
C = np.concatenate( ( a, b, c, a ), 1 )
除了将数组存储在字典中然后在for循环中进行字符串搜索和连接之外,我还没有想到如何解决这个问题。是否有一种优雅的方式来做到这一点?
答案 0 :(得分:1)
如果你想要紧凑:
np.concatenate([dict(a=a, b=b, c=c)[x] for x in list3], 1)
或者避免冗余字典创建:
by_label = dict(a=a, b=b, c=c)
np.concatenate([by_label[x] for x in list3], 1)
答案 1 :(得分:1)
您可以使用globals对象根据名称获取数组。
globals()["a"] # array a
所以可以做到
np.concatenate(tuple(globals()[x] for x in list3),1)
答案 2 :(得分:1)
您可以使用locals()
字典按名称访问变量
d = locals()
np.concatenate([d[x] for x in list3], 1)
答案 3 :(得分:1)
通过调用locals()函数,您可以轻松获得所有局部变量的字典。例如,要查找名为“a”的变量:
var = 'a'
locals()[var]
由于np.concatenate似乎采用了元组,因此您可以使用:
lc = locals()
C = np.concatenate(tuple(lc[var] for var in list3), 1)
答案 4 :(得分:0)
为什么不直接存储变量而不是名字? 喜欢:
id
或者你可以使用parent_order_id
(大部分时间似乎都没有推荐):
user_id