从多维数组(PYTHON)返回任意行
问题描述:
我正在使用python中的5x5x5x5x5 5维数组。从多维数组(PYTHON)返回任意行
如何使一个函数,
- 将采取整数i(1 < = I < = 5),其尺寸要迭代通过,另4个维度[A,B的列表,C,d]要在
- 返回锁定长度5
的例如一维列表:
>>> BB =(5维阵列)
>>> rowExtract(3,[2,3,0,2],BB)
* [BB [2] [3] [I] [0] [2]对i在范围( 5)] *返回
的3是用于第三尺寸,且2,3,0,2表示其它尺寸
我可以通过硬编码5个不同的场景做,但有更简单的办法?
答
我认为没有其他办法。所以像这样
def extractRow(row, arr, bb):
if row == 0:
return [bb[i][arr[0]][arr[1]][arr[2]][arr[3]] for i in range(5)]
elif row == 1:
return [bb[arr[0]][i][arr[1]][arr[2]][arr[3]] for i in range(5)]
...
答
下面是使用循环的一种方法。
def extract_row(row, arr, bb):
N = len(arr) + 1
pre_mat = bb
for i in range(row):
pre_mat = pre_mat[arr[i]]
ans = []
for i in range(N):
mat = pre_mat[i]
for j in range(row + 1, N):
mat = mat[arr[j - 1]]
ans.append(mat)
return ans
答
一个可能的解决方案使用迭代器来生成索引序列。 “缺失”维可以插入到arr
中,并且每次通过生成器循环时都会使用下一个值填充该索引。每次发生器产生时,它会生成一个5元素数组,其中包含从bb
中提取下一个值所需的索引。然后你可以从bb
中选择你想要的元素。
def extract_row(row, bb, arr):
retval = []
for a0, a1, a2, a3, a4 in iter_indices(row, arr):
retval.append(bb[a0][a1][a2][a3][a4])
return retval
def iter_indices(row, arr):
arr.insert(row, None)
for i in range(5):
arr[row] = i
yield arr
# TEST CODE FOLLOWS
g = 0
def deepen(b, n):
global g
if n == 1:
b.append(g)
b.append(g+1)
b.append(g+2)
b.append(g+3)
b.append(g+4)
g += 5
return b
for m in range(5):
b.append(deepen([], n-1))
return b
a = []
deepen(a, 5)
# Run it using the test matrix a
print(extract_row(1, a, [1, 2, 3, 4]))
print(a[1][0][2][3][4], a[1][1][2][3][4], a[1][2][2][3][4], a[1][3][2][3][4], a[1][4][2][3][4])
Output is:
[694, 819, 944, 1069, 1194]
694 819 944 1069 1194
嗯,我同意。我还没有在互联网上的其他地方看到过这样的问题。看起来Python似乎不支持这样一个特定的问题。谢谢! – marlont