我想将一个大数组切成小数组,并为每个小数组取不同的名称。
我使用2 for循环将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]])
这样我可以将这些数组应用为数组名称,而不是直接加载原始的大数组。
答案 0 :(得分:5)
最好的方法是创建词典:
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]])
答案 1 :(得分:0)
为什么只创建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]])}
答案 2 :(得分:0)
看看许多可能的答案here,但我认为通常这样做是个坏主意。您最好只做slice[p][q]
。