[英]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.