繁体   English   中英

在python中使用3D数组填充2D数组

[英]Filling a 2D array using a 3D array in python

作为初学者,我在 Python 中遇到了一些麻烦。 让我举一些例子,让我们考虑以下数据:

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

我想作为输出:

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

为此,我已经尝试将数据数组切成较小的数组 (2x2),但我找不到使其工作的方法。 我认为如果我能找到一种方法让这个小程序工作,我将能够处理更大的数据文件。

所以这是我的实际代码:

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])
            print('B = ' + str(B))
print('end')

感谢您的时间。

您想要的四个总和可以像这样有效地计算:

import numpy as np
arr = np.array(data)

w = arr[0::2,0] # array([ 1,  3,  5, 13])
x = arr[0::2,1] # array([ 7,  9, 11, 14])
y = arr[1::2,0] # array([ 2,  4,  6, 15])
z = arr[1::2,1] # array([ 8, 10, 12, 16])

B = [[w.sum(), x.sum()], [y.sum(), z.sum()]]

arr[1::2,0]表示“从第 1 行开始,每隔一行取一次,然后取第 0 列。”

def slice_array(raw_data):
    ret = [[0,0],
          [0,0]]
    for d in range(len(raw_data)):
        if d % 2 == 0:
           ret [0][0] += raw_data[d][0]
           ret [0][1] += raw_data[d][1] 
        if d % 2 == 1:
           ret [1][0] += raw_data[d][0]
           ret [1][1] += raw_data[d][1] 
    return ret

这应该有效。 只需将要切片的数组作为输入即可。

此代码也应该工作:

X1 = [x[0] for x in data]
X2 = [x[1] for x in data]

B = [ [sum(X1[0::2]), sum(X2[0::2])], 
      [sum(X1[1::2]), sum(X2[1::2])]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM