【问题标题】:Filling a 2D array using a 3D array in python在 python 中使用 3D 数组填充 2D 数组
【发布时间】:2021-09-27 18:44:16
【问题描述】:

作为初学者,我在 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')

感谢您的宝贵时间。

【问题讨论】:

    标签: python arrays numpy multidimensional-array


    【解决方案1】:

    你想要的四个总和可以这样高效地计算出来:

    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 列。”

    【讨论】:

    • 谢谢,但我正在寻找一些带有循环的解决方案,因为我的数据数组可以由内部更多的 2x2 数组组成。所以我不知道我需要多少个变量(名称 w、x、y、z)
    • @NycoElm:如果您想要更通用的解决方案,请在问题中发布替代输入和输出示例。或者,尝试使用上述构建块自己编写循环。
    • 是的,对不起,我应该提出一种更通用的解决方案......但我在想如果我能解决这个问题,我就可以扩展到其他应用程序。我会尝试循环,谢谢!
    【解决方案2】:
    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
    

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

    【讨论】:

      【解决方案3】:

      这段代码也应该可以工作:

      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])]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        • 2019-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        相关资源
        最近更新 更多