python - 如何通过python做3维数组的累积和?(用于 3 维循环)
问题描述
我有一个三维数组
x=
[[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]],
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]],
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]],
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]]
我需要如下的累积总和
y=
[[[1, 21], [3, 28], [6, 36], [10, 45], [15, 55]],
[[1, 21], [3, 28], [6, 36], [10, 45], [15, 55]],
[[1, 21], [3, 28], [6, 36], [10, 45], [15, 55]],
[[1, 21], [3, 28], [6, 36], [10, 45], [15, 55]]]
我想通过单独使用 for 循环和 sum 来实现这一点,即不使用任何特定函数,如 numpy 或 itertools,也不使用任何额外的临时变量。
我努力了
for k in range(0,1):
for j in range(0,5):
for i in range(0,4):
y[i][j][k]=sum(sum(x[i][j][k] for jj in range(0,5) if jj<=j)for kk in range(0,1) if kk<=k)
但我得到了
y[i][j][k]=[[[1, 12], [3, 26], [6, 42], [10, 60], [15, 80]],
[[1, 12], [3, 26], [6, 42], [10, 60], [15, 80]],
[[1, 12], [3, 26], [6, 42], [10, 60], [15, 80]],
[[1, 12], [3, 26], [6, 42], [10, 60], [15, 80]]]
根据我的需要如何做for循环?
我有
x[0][0][0]=1
x[0][1][0]=2
x[0][2][0]=3
x[0][3][0]=4
x[0][4][0]=5
x[0][0][1]=6
x[0][1][1]=7
x[0][2][1]=8
x[0][3][1]=9
x[0][4][1]=10
. . . . 我需要去做
y[0][0][0]=x[0][0][0]=1
y[0][1][0]=x[0][0][0]+x[0][1][0]=3
y[0][2][0]=x[0][0][0]+x[0][1][0]+x[0][2][0]=6
y[0][3][0]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]=10
y[0][4][0]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]+x[0][4][0]=15
y[0][0][1]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]+x[0][4][0]+x[0][0][1]=21
y[0][1][1]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]+x[0][4][0]+x[0][0][1]+x[0][1][1]=28
y[0][2][1]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]+x[0][4][0]+x[0][0][1]+x[0][1][1]+x[0][2][1]=36
y[0][3][1]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]+x[0][4][0]+x[0][0][1]+x[0][1][1]+x[0][2][1]+x[0][3][1]=45
y[0][4][1]=x[0][0][0]+x[0][1][0]+x[0][2][0]+x[0][3][0]+x[0][4][0]+x[0][0][1]+x[0][1][1]+x[0][2][1]+x[0][3][1]+x[0][4][1]=55
. . .
(清楚地用我的确切要求重新发布我的问题)
解决方案
我相信通常的cumsum
功能会放1
, not 21
, iny[0][0][1]
等。这段代码会这样做:
y=[[[0,0] for b in range(5)] for a in range(4)]
for a in range(4):
for c in range(2):
cum = 0
for b in range(5):
cum+=x[a][b][c]
y[a][b][c] = cum
但是,如果您想21
简单地将cum = 0
行移到c
循环外
编辑
为了避免额外的变量:
for a in range(4):
for c in range(2):
y[a][0][c] = x[a][0][c]
for b in range(1,5):
y[a][b][c] = x[a][b][c] + y[a][b-1][c]
第二次编辑
并得到21
而不是1
作为第一对的第二个值:
for a in range(4):
for c in range(2):
y[a][0][c] = x[a][0][c]
if c==1:
y[a][0][1] += y[a][4][0]
for b in range(1,5):
y[a][b][c] = x[a][b][c] + y[a][b-1][c]
推荐阅读
- excel - #参考!刷新工作簿后
- java - 如何强制类遵循合同来定义 DB-insert 语句?
- r - popbio - 为什么它不阅读我的生育专栏
- mesos - DCOS 服务无故卡住
- javascript - 实例化函数时如何将局部变量保存在内存中?
- tensorflow - Keras 模型在本地运行良好,但无法在 Flask API 上运行
- android - 在 OnViewCreated 变量中分配函数值
- java - 竞争条件,较小的请求优先于较大的 Java 8 异步
- spring-boot - 通过 Spring Security 的 Active Directory 身份验证返回由 LDAP 引起的有效用户的错误凭据:错误代码 49
- c# - 在 C# 和 ASP.NET MVC 中将音频直接从 URL 流式传输到 Web 浏览器?