如何使用exec将numpy数组分配给字符串变量?

2024-04-26 21:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用exec方法将numpy数组分配给字符串变量

x = np.random.rand(3,2)
y = np.random.rand(4)
z = np.random.rand(2,2)

r = ['x','y','z']

for i in r:
    exec("%s = %g"%(i,eval(i)+2))

但是当我执行代码时,它给出了错误

TypeError: float argument required, not numpy.ndarray

如果我将数组转换为标量,那么它就工作了

for i in r:
    exec("%s = %f"%(i,eval(i).sum()))

如何将numpy数组分配给字符串变量


Tags: 方法字符串代码innumpyfor错误eval
1条回答
网友
1楼 · 发布于 2024-04-26 21:14:27

要理解你想做什么有点难。名称空间中已经有名为x, y, z的数组,那么为什么要尝试创建指向相同数组的新变量x, y, z

如果您有一个名为a的numpy数组,并且希望创建一个指向它的新变量x,您可以这样做

exec('%s = %s' % ('x', 'a'))

这当然与x = a相同

对于这个问题,实际上不太可能需要使用exec。如果要为一组数组指定名称(包含在列表中),那么应该查看Python dict容器,而不是创建名称空间变量。例如:

array_di = dict()
keys = ['x', 'y', 'z']
arrays = [np.random.randn(3), np.random.randn(4), np.random.randn(5)]
for k, a in zip(keys, arrays):
    array_di[k] = a

或作为一个班轮:

array_di = {k: a for k, a in zip(keys, arrays)}

然后您可以以array_di['x']的形式访问数组

相关问题 更多 >