2015-01-27 3 views
0

Я инициализируется в Numpy массив как:Назначение переменных динамически в Python

import numpy as np 
data = np.loadtxt('rand1.csv', delimiter=',', dtype=np.int) 

После импорта «данные» выглядит следующим образом:

array([[422, 858, 129, 312, 79, 371], 
     [ 39, 280, 366, 13, 316, 81], 
     [929, 49, 909, 734, 635, 779], 
     [365, 570, 863, 108, 545, 846], 
     [150, 820, 193, 373, 865, 770], 
     [486, 547, 759, 56, 413, 470], 
     [322, 171, 463, 998, 351, 92], 
     [690, 297, 558, 476, 60, 804]]) 

Теперь я пытаюсь сохранить каждый из этих элементов массива в разных переменных. То есть, если мой массив равен nxm, то должны быть nm различные переменные. код я использую:

for x in range(0,8): 
    for y in range(0,6): 
     str(x)+str(y)=data[x,y] 

Но это дает мне ошибку говоря

"SyntaxError: can't assign to operator"

. Может ли кто-нибудь сказать, что я делаю неправильно здесь и как это сделать?

+1

«Кто-нибудь может сказать, что я делаю неправильно здесь» - вся идея абсурдна. не делайте этого. –

+0

Не могли бы вы объяснить, почему? –

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что мы не помогаем людям делать глупые вещи. –

ответ

0

Python - действительно динамический язык, и вы можете найти множество способов для динамического создания переменных. Но, пожалуйста, не когда-нибудь попробовать:

  • это было бы бесполезно, так как вы можете получить доступ к значению с данными синтаксиса [х, у]
  • было бы трудно использовать в любом месте вашего кода, так как вы может точно не знать количество этих динамических переменных.

Если вы не хотите использовать массив numpy, вы можете использовать список списков. Но, пожалуйста, не пытайтесь создавать переменные во время выполнения, это будет действительно анти-шаблон.

+1

Ну, самое ближайшее в словаре будет «ключевое» задание. Это довольно законный способ создания «динамических» переменных, хотя это, безусловно, безопаснее и, что более важно, содержится. – Eithos

0

Как уже упоминалось в комментариях и другом ответе, это Плохая идея и очень вероятно проблема XY. Это, как говорится, это является строго возможно:

globals()[str(x)+str(y)] = data[x, y] 

Это работает, потому что globals() возвращает Dict, который отображает имена переменных уровня модуля (хранятся в виде строки) на соответствующие объекты. Вы должны использовать эту Dict, потому что в противном случае вы пытаетесь сделать что-то вроде:

'foo' = 'bar' 

, которые вы не должны ожидать, чтобы быть действительным.

Как написано, это особенно хрупкое и бессмысленное. Строки, которые вы создаете, являются чисто числовыми и, следовательно, недопустимыми именами переменных. Это означает, что вы можете добраться до них, просмотрев их в globals(). Это можно было бы смягчить, поставив букву или слово на перед ними, так

globals()['data'+str(x)+str(y)] = data[x, y] 

И тогда вы могли бы получить доступ к ним по print(data00) и так далее.

Пожалуйста, на самом деле не делайте этого.

+0

Я не собираюсь звучать повторяюще об этом ... но нигде в объяснении OP не говорится, что они хотят загрязнить глобальное пространство имен динамически сгенерированными переменными. Единственная часть, которая является истиной, - желание OP создавать динамические переменные, что отлично работает с пользовательским словарем. Я не говорю, что это решение для этой конкретной проблемы, но совершенно разумно писать «foo» = «bar» при выполнении myOwnDict ['foo'] = 'bar'. Хотя хорошо предупредить новичков об использовании globals(), возможно, было бы даже лучше сказать: «Здесь создайте свой собственный словарь». – Eithos

Смежные вопросы