通过名称访问元组中的变量
我需要根据变量的名字来访问这些变量,方法如下:
a = numpy.array([1,2,3])
b = numpy.array([4,5,6])
names = ('a', 'b')
然后,我把变量 names
传给一个函数,比如 numpy.hstack(),这样就能得到和 numpy.hstack((a,b))
一样的结果。
那么,最好的 Python 方法是什么呢?
这样做的目的是什么呢?我有一个函数,它接受 numpy 数组的名字,然后把相关的数组(在函数里定义的)堆叠在一起进行处理。我需要创建这些数组的所有可能组合,因此:
- 创建一个数组名字的组合(元组)。
- 把这个组合(元组)作为参数传给一个函数。
- 这个函数把相关的数组连接起来,并处理结果。
希望这个问题不是太难懂。提前感谢大家的回答 :-)
4 个回答
2
既然你在使用numpy,并且想通过名字来引用数组,那么你可能应该使用一个叫做recarray的东西:
import numpy as np
import itertools as it
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])
names=('a','b','c')
arr=np.rec.fromarrays([a,b,c],names=names)
一旦你定义了这个recarray arr
,你就可以通过名字来访问每一列:
In [57]: arr['a']
Out[57]: array([1, 2, 3])
In [58]: arr['c']
Out[58]: array([7, 8, 9])
所以,如果你想生成名字的组合,并用np.hstack把这些列合并起来,你可以这样做:
for comb in it.combinations(names,2):
print(np.hstack(arr[c] for c in comb))
# [1 2 3 4 5 6]
# [1 2 3 7 8 9]
# [4 5 6 7 8 9]
2
如果我理解你的问题没错的话,你需要像这样使用 locals()
:
def lookup(dic, names):
return tuple(dic[name] for name in names)
...
a = numpy.array([1,2,3])
b = numpy.array([4,5,6])
names = ('a', 'b')
numpy.hstack(lookup(locals(), names))
2
你可以使用内置的函数 locals
,这个函数会返回一个字典,里面包含了当前作用域内的所有变量和它们的值:
>>> a = 1
>>> locals()['a']
1
>>> a = 1; b = 2; c = 3
>>> [locals()[x] for x in ('a','b','c')]
[1, 2, 3]
你也可以把你的数组直接放在自己的字典里,或者放在一个模块中。