Как назначить numpy массивов строковой переменной, используя exe c? - PullRequest
0 голосов
/ 02 марта 2020

Я хочу присвоить numpy массивы строковой переменной, используя метод exec.

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, а не numpy .ndarray

Если я преобразую массивы в скалярные, то это сработает,

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

Как нам присвоить numpy массивы для строковая переменная?

1 Ответ

1 голос
/ 02 марта 2020

Немного трудно понять, что вы пытаетесь сделать. У вас уже есть массивы с именем x, y, z в вашем пространстве имен, так почему вы пытаетесь создать новые переменные x, y, z, указывающие на те же массивы?

Если у вас есть массив numpy с именем a и вы Если вы хотите создать новую переменную 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'].

...