Создание массивов с помощью al oop (Python) - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать несколько массивов из большого массива, который у меня есть. Я имею в виду:

data = [[0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0], 
[0, 1, 1, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 1, 1, 0, 0, 0, 0, 0,1], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0], 
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0]]  

Я хочу создать 10 разных массивов - используя 10 столбцов данных - с разными именами.

data1 = [0, 0, 0, 1, 0, 0, 1, 0, 0],
data2 = [1, 0, 1, 0, 0, 0, 0, 1, 0], and so on

Я нашел близкое решение здесь - Также оттуда я беру примерные данные - Однако, когда я попробовал предложенное решение:

for d in xrange(0,9):
exec 'x%s = data[:,%s]' %(d,d-1)

Появляется сообщение об ошибке:

exec(code_obj, self.user_global_ns, self.user_ns)

  File "", line 2, in 
    exec ('x%s = data[:,%s]') %(d,d-1)

  File "", line 1
    x%s = data[:,%s]
                 ^
SyntaxError: invalid syntax

Пожалуйста, любые комментарии будут будут высоко оценены. С уважением

Ответы [ 4 ]

1 голос
/ 27 мая 2020

Используйте numpy индекс массива:

data = [[0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0], 
[0, 1, 1, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[0, 0, 1, 1, 0, 0, 0, 0, 0,1], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0], 
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0]]

d = np.array(data)

d[:, 0]
#array([0, 0, 0, 1, 0, 0, 1, 0, 0])

d[:, 1]
#array([1, 0, 1, 0, 0, 0, 0, 1, 0])

et c ...

d[:, 9]
#array([0, 0, 1, 1, 1, 0, 0, 0, 0])

Если необходимо, то словари - это способ go:

val = {i:d[:,i] for i in range(d.shape[1])}

Для доступа к массивам:

val[0]
#array([0, 0, 0, 1, 0, 0, 1, 0, 0])

...

val[9] 
#array([0, 0, 1, 1, 1, 0, 0, 0, 0])
0 голосов
/ 27 мая 2020

Либо используйте массив numpy, как показано выше scott boston, либо используйте словарь, подобный этому:

a = {}

for i in range(0,9):
    a[i] = data[i][:]

Вывод:

{0: [0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
 1: [0, 0, 1, 0, 0, 1, 0, 0, 0, 0],
 2: [0, 1, 1, 0, 0, 0, 0, 0, 0, 1],...
0 голосов
/ 27 мая 2020
  1. Я не вижу правильного отступа в вашем for l oop.

  2. Я предлагаю вам не использовать% s для второго аргумента (строка), а% d (число), поскольку вам нужен номер для индексации вашего массива.

0 голосов
/ 27 мая 2020

Используйте следующий код (он также более читабелен - для python 3.x), если вы действительно хотите создать динамические c переменные:

for d in range(0,9):
  # exec 'x%s = data[:,%s]' %(d,d-1)
  exec(f"data{d} = {data[d]}" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...