【问题标题】:Python iterate through a matrixPython遍历矩阵
【发布时间】:2022-01-06 04:53:35
【问题描述】:

我有一个函数可以计算输入向量中所有值组合的一些结果:

MyFunction(inp_vec):
    ...
    return some_array

inp_vec 可以是 1 到 6 之间任意长度的列表。因此,输出数组 some_array 可以分别是 (1,1) 和 (6,6) 之间的任意大小。

对于一些进一步的计算,我想组装一个大小为 (6,6) 的数组,它首先由全零组成A = np.empty([6,6]),并且由函数计算的相应条目将是替换为一些值。

问题在于输出数组 some_array 的大小可能不同于 (6,6)。

我想使用 numerate() 之类的东西,但在这种 for 循环中:

for i,j in list(itertools.product(inp_vec, inp_vec)):
    A[n,m] = some_array[i, j]

如何获得迭代器 n、m?

【问题讨论】:

    标签: python for-loop multidimensional-array iterator enumerate


    【解决方案1】:

    我想这就是你想要的:

    import numpy as np
    import itertools
    inp_vec = np.array([1,2,3])
    A = np.empty([6,6])
    
    M = np.array(list(itertools.product(inp_vec, inp_vec))).reshape(len(inp_vec),-1,2)
    print(M)
    

    输出:

    [[[1 1]
      [1 2]
      [1 3]]
    
     [[2 1]
      [2 2]
      [2 3]]
    
     [[3 1]
      [3 2]
      [3 3]]]
    

    【讨论】:

    • 非常感谢!我看不出这如何帮助我将函数的输出写入 6x6 数组的正确位置?
    【解决方案2】:

    最终通过在for循环中引入迭代器n和m,输出数组中的条目与目标数组之间的映射来解决:

    for i,j in itertools.product(some_array_indices, some_array_indices):
        m = inp_vec_indices[i]
        n = inp_vec_indices[j]
        A[m][n] = float(some_array[i][j])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2015-07-21
      • 1970-01-01
      • 2018-10-27
      相关资源
      最近更新 更多