Нарезать массив и дать конкретное имя каждому маленькому массиву с помощью цикла в Python - PullRequest
1 голос
/ 14 мая 2019

Я хочу разделить большой массив на маленькие и дать разные имена каждому маленькому массиву.

Я использовал цикл 2 для разбиения большого массива 10 * 10 на 25 2 * 2 массива, я могу распечатать их в каждом цикле, но мне не удалось дать каждому массиву конкретное имя. Я также попытался объединить функцию .format () в цикл, но все равно не получилось.

Код ниже работал нормально и распечатал нарезанную матрицу 2 * 2, которую я хочу:

import numpy as np

a = np.arange(100).reshape(10, 10)

for p in range(0,a.shape[0],2):
    for q in range(0,a.shape[1],2):
        print(a[p:p+2,q:q+2])

Но приведенный ниже код не удался, когда я попытался сгенерировать определенное имя для каждого сгенерированного массива:

import numpy as np

a = np.arange(100).reshape(10, 10)

for p in range(0,a.shape[0],2):
    for q in range(0,a.shape[1],2):
        'slice_{0}_{1}'.format(p,q) = a[p:p+2,q:q+2]

Я ожидаю получить массивы в формате ниже:

slice_0_0 = array([[ 0, 1],[10,11]])
slice_0_2 = array([[ 2, 3],[12,13]])
...
slice_8_8 = array([[88,89],[98,99]])

Так что я могу применить эти массивы с именами массива вместо прямой загрузки исходного большого массива.

  • Мне упоминали, что этот вопрос может быть дубликатом этого , однако я действительно не понял, что означает "переменные переменные", хотя нам обоим рекомендовалось использовать словарь.

Ответы [ 3 ]

5 голосов
/ 14 мая 2019

Лучший способ сделать это - создать словарь:

d={}

for p in range(0,a.shape[0],2):
    for q in range(0,a.shape[1],2):
        d['slice_{0}_{1}'.format(p,q)] = a[p:p+2,q:q+2]

In [7] : d['slice_0_0']
Out[7] : array([[ 0,  1], [10, 11]])
0 голосов
/ 14 мая 2019

Взгляните на множество возможных ответов здесь , но я думаю, что это вообще плохая идея.Вы могли бы лучше просто сделать slice[p][q].

0 голосов
/ 14 мая 2019

Почему вы хотите создать так много переменных, когда вы можете просто создать двумерный список 9x9 и использовать его индексы для представления имен переменных

import numpy as np

a = np.arange(100).reshape(10, 10)

#2D list of 9x9
slice = [ [0 for _ in range(9)] for _ in range(9)]
for p in range(0,a.shape[0],2):
    for q in range(0,a.shape[1],2):
        #Assign elements to the 2D list
        slice[p][q] = a[p:p+2,q:q+2]

print(slice)

Затем вы можете получить доступ к любой переменной, используя те же индексы, которые вы использовали в именах переменных

#slice_0_0
print(slice[0][0])
#slice_0_2
print(slice[0][2])
#slice_8_8
print(slice[8][8])

Выход будет

[[ 0  1]
 [10 11]]
[[ 2  3]
 [12 13]]
[[88 89]
 [98 99]]

Или другой способ решения этой проблемы - использовать dictionary с ключом в качестве имен переменных слайса

import numpy as np

a = np.arange(100).reshape(10, 10)

#Dictionary for slice variables
slice = {}

for p in range(0,a.shape[0],2):
    for q in range(0,a.shape[1],2):
        #Assign values to appropriate keys
        key = 'slice_{0}_{1}'.format(p,q)
        slice[key] = a[p:p+2,q:q+2]

print(slice)

Вывод будет

{'slice_0_0': array([[ 0,  1],
       [10, 11]]), 'slice_0_2': array([[ 2,  3],
       [12, 13]]), 'slice_0_4': array([[ 4,  5],
       [14, 15]]), 'slice_0_6': array([[ 6,  7],
       [16, 17]]), 'slice_0_8': array([[ 8,  9],
       [18, 19]]), 'slice_2_0': array([[20, 21],
       [30, 31]]), 'slice_2_2': array([[22, 23],
       [32, 33]]), 'slice_2_4': array([[24, 25],
       [34, 35]]), 'slice_2_6': array([[26, 27],
       [36, 37]]), 'slice_2_8': array([[28, 29],
       [38, 39]]), 'slice_4_0': array([[40, 41],
       [50, 51]]), 'slice_4_2': array([[42, 43],
       [52, 53]]), 'slice_4_4': array([[44, 45],
       [54, 55]]), 'slice_4_6': array([[46, 47],
       [56, 57]]), 'slice_4_8': array([[48, 49],
       [58, 59]]), 'slice_6_0': array([[60, 61],
       [70, 71]]), 'slice_6_2': array([[62, 63],
       [72, 73]]), 'slice_6_4': array([[64, 65],
       [74, 75]]), 'slice_6_6': array([[66, 67],
       [76, 77]]), 'slice_6_8': array([[68, 69],
       [78, 79]]), 'slice_8_0': array([[80, 81],
       [90, 91]]), 'slice_8_2': array([[82, 83],
       [92, 93]]), 'slice_8_4': array([[84, 85],
       [94, 95]]), 'slice_8_6': array([[86, 87],
       [96, 97]]), 'slice_8_8': array([[88, 89],
       [98, 99]])}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...