循环和计数python2d数组

2024-04-26 10:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数组:

[
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0]
]

我想每3个数组计算一个值,所以我期望的结果是:

[
[3, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 3, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 2, 1, 0, 0, 0, 0, 0]
]

我不知道怎么循环。你知道吗

更新。。 这个问题解决了。非常感谢。我试试希吉的代码

if len(arr)%3==0:
    print([[sum(y) for y in zip(arr[x],arr[x+1],arr[x+2])] for x in range(0, len(arr),3)])

Tags: 代码inforlenifrange数组zip
3条回答

尝试:

result = []
for i in range(int(len(a)/3)):
    result.append(np.sum(a[i*3:i*3+3], axis=0))

[array([3, 0, 0, 0, 0, 0, 0, 0, 0]),
 array([0, 3, 0, 0, 0, 0, 0, 0, 0]),
 array([0, 0, 2, 1, 0, 0, 0, 0, 0])]

您可以这样在pandas中执行此操作(它将行拆分为3行,然后取每组行的总和):

import pandas as pd
import numpy as np
df=pd.DataFrame([
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0]
])
df.groupby(np.arange(len(df))//3).sum().to_numpy().tolist() 

输出:

[[3, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 3, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 2, 1, 0, 0, 0, 0, 0]]

对于纯非进口方式:

combine=[] 
for x in range(3): 
   combine.append(list(sum((a[x*3:x*3+3])))) 
list(combine)  

输出:

[[3, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 3, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 2, 1, 0, 0, 0, 0, 0]]

对于数组中的每三行,可以使用numpy.sum()沿axis=0。你知道吗

import numpy as np
if len(arr)%3==0:
    print(np.array([np.sum(arr[x:x+3], axis = 0) for x in range(0, len(arr),3) ]))

[[3 0 0 0 0 0 0 0 0]
 [0 3 0 0 0 0 0 0 0]
 [0 0 2 1 0 0 0 0 0]]

或者使用简单的列表理解

if len(arr)%3==0:
    print([[sum(y) for y in zip(arr[x],arr[x+1],arr[x+2])] for x in range(0, len(arr),3)])

[[3, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 3, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 2, 1, 0, 0, 0, 0, 0]]

相关问题 更多 >