簡體   English   中英

使用 2D 和 3D 數組對數組中的值求和

[英]Sum values in an array using 2D and 3D arrays

因為我對上一個問題不清楚,我正在重新編輯它:

讓我們假設一個數組

A = [[A[0][0], A[0][1], ..., A[0][10]],
     [A[1][0], A[1][1], ..., A[1][10]],  
     [............................],
     [A[1k][0], A[1k][1], ..., A[1k][10]],
     [A[1k+1][0], A[1k+1][1], ..., A[1k+1][10]],
     [A[1k+2][0], A[1k+2][1], ..., A[1k+2][10]],
     [.....................................],
     [A[2k][0], A[2k][1], ..., A[2k][10]],
     [A[2k+1][0], A[2k+1][1], ..., A[2k+1][10]],
     [.....................................],
     [A[nk][0], A[nk][0], ..., A[nk][10]]]

作為輸出,我試圖得到:

B = [[A[0][0]+A[1k][0]+...+A[nk][0], A[0][1]+A[1k][1]+...+A[nk][1], ... , A[0][10]+A[1k][10]+...+A[nk][10]],
     [A[1][0]+b[1k+1][0]+...+A[nk+1][0], A[1][1]+A[1k+1][1]+...+A[nk+1][1], ... , A[1:10]+A[1k+1][10]+...+A[nk+1][10]],
     [.......................................................................................................], 
     [A[1k-1][0]+A[2k-1][0]+...+A[(n+1)k-1][1], A[1k-1][1]+A[2k-1][1]+...+A[(n+1)k-1][1], ... , A[1k-1][10]+A[2k-1][10]+...+A[(n+1)k-1][10]],

恢復,它是新數組中子數組的所有第一個元素的總和。

我已經用一個更小的例子嘗試過這個:

data = [[1, 7],
        [2, 8],
        [3, 9],
        [4, 10],
        [5, 11],
        [6, 12],
        [13, 14],
        [15, 16]]
A= {}
m=2
A=[data[idx: idx + m] for idx in range(0, len(data), m)]
B=[]
for a in range(1,2) :
    for l in range(2):
        B.append([])
        for c in range(2):
            B[l].append(A[a][l][c]+A[a-1][l][c])
            print('B = ' + str(B))
print('end')

我試圖獲得:

B = [[1+3+5+13, 7+9+11+14],
     [2+4+6+15, 8+10+12+14]]

我的例子很簡單,因為它有一個眾所周知的行數。

但我找不到通用的解決方案。 另外,我真的不知道我有多少 n*1k 行,但是如果我能找到至少 2k 行的解決方案,我想我可以改進它。 謝謝你的時間。

您可以按如下方式創建所需的輸出。

代碼

def sum_data(data, rows_per_group):
    mt = list(zip(*data))            # Matrix transpose to allow summing 
                                     # over column element
                                     # (see https://www.geeksforgeeks.org/transpose-matrix-single-line-python/
    
    # Use list comprehension to sum 
    return [[sum(p[offset::rows_per_group]) for p in mt] for offset in range(rows_per_group)]

示例用法:

data = [[1, 7],
        [2, 8],
        [3, 9],
        [4, 10],
        [5, 11],
        [6, 12],
        [13, 14],
        [15, 16]]

print(sum_data(data, 2))

# Output:
[[22, 41], [27, 46]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM