Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NumPy-迭代二维列表和打印(行、列)索引_Python_Pandas_Numpy - Fatal编程技术网

Python NumPy-迭代二维列表和打印(行、列)索引

Python NumPy-迭代二维列表和打印(行、列)索引,python,pandas,numpy,Python,Pandas,Numpy,我很难使用NumPy和/或Pandas来处理2D列表: 获取所有元素的唯一组合的和,无需再次从同一行中进行选择(下面的数组应为81个组合) 打印组合中每个元素的行和列 例如: arr = [[1, 2, 4], [10, 3, 8], [16, 12, 13], [14, 4, 20]] (1,3,12,20), Sum = 36 and (row, col) = [(0,0),(1,1),(2,1),(3,2)] (4,10,16,20), Sum = 50 and (row, col)

我很难使用
NumPy
和/或
Pandas
来处理
2D
列表:

  • 获取所有元素的唯一组合的
    ,无需再次从同一行中进行选择(下面的数组应为81个组合)

  • 打印组合中每个元素的行和列

  • 例如:

    arr = [[1, 2, 4], [10, 3, 8], [16, 12, 13], [14, 4, 20]]
    
    (1,3,12,20), Sum = 36 and (row, col) =  [(0,0),(1,1),(2,1),(3,2)]
    
    (4,10,16,20), Sum = 50 and (row, col) =[(0,2),(1,0),(2,0),(3,2)]
    

    您可以使用
    itertools
    中的
    product
    功能:

    from itertools import product    
    y = [sum(p) for p in product(*arr)]
    
    len(y)
    # 81
    
    列表较小的示例:

    arr = [[1,2],[3,4],[5,6]]
    [sum(p) for p in product(*arr)]
    # [9, 10, 10, 11, 10, 11, 11, 12]
    

    通过创建所有这些组合并求和来实现此方法:这里是一种使用and
    数组索引的矢量化方法
    -

    from itertools import product
    
    a = np.asarray(arr)  # Convert to array for ease of use and indexing
    m,n = a.shape
    combs = np.array(list(product(range(n), repeat=m)))
    out = a[np.arange(m)[:,None],combs.T].sum(0)
    
    样本运行-

    In [296]: arr = [[1, 2, 4], [10, 3, 8], [16, 12, 13], [14, 4, 20]]
    
    In [297]: a = np.asarray(arr)
         ...: m,n = a.shape
         ...: combs = np.array(list(product(range(n), repeat=m)))
         ...: out = a[np.arange(m)[:,None],combs.T].sum(0)
         ...: 
    
    In [298]: out
    Out[298]: 
    array([41, 31, 47, 37, 27, 43, 38, 28, 44, 34, 24, 40, 30, 20, 36, 31, 21,
           37, 39, 29, 45, 35, 25, 41, 36, 26, 42, 42, 32, 48, 38, 28, 44, 39,
           29, 45, 35, 25, 41, 31, 21, 37, 32, 22, 38, 40, 30, 46, 36, 26, 42,
           37, 27, 43, 44, 34, 50, 40, 30, 46, 41, 31, 47, 37, 27, 43, 33, 23,
           39, 34, 24, 40, 42, 32, 48, 38, 28, 44, 39, 29, 45])
    

    节省内存的方法:这里有一种方法,它不需要创建所有这些组合,而是使用即时总结,其理念深受-


    我尝试了常规的python
    循环。但我需要使用numpy/panda提供的高性能数据结构。我搜索了很多论坛,但找不到如何循环所有元素的组合。谢谢,它没有打印帮助得出那个总数的元素(行、列)索引。我该怎么做。?
    
    a = np.asarray(arr)
    m,n = a.shape
    out = a[0]
    for i in range(1,m):
        out = out[...,None]  + a[i]
    out.shape = out.size # Flatten