从多维数组返回任意行(PYTHON)

2024-04-23 19:54:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python中的5x5维数组。你知道吗

我怎样才能使一个函数

  • 将取一个整数i(1<;=i<;=5)迭代该维度,并锁定其他4个维度(a、b、c、d)的列表
  • 返回长度为5的一维列表

例如:

>;>;bb=(5维数组)

>;>;行提取(3,[2,3,0,2],bb)

*[bb[2][3][i][0][2]for i in range(5)]返回*

3代表第三维度,2,3,0,2代表其他维度

我可以通过硬编码5种不同的场景来实现,但是有没有更简单的方法呢?你知道吗


Tags: 方法函数inltgt编码列表for
3条回答

一种可能的解决方案是使用迭代器生成索引序列。“missing”维度可以插入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

我想没有别的办法了。像这样的事情

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

相关问题 更多 >