【发布时间】:2021-03-07 07:17:18
【问题描述】:
我有一个 (n × i × j) - 3D numpy 数组:a_3d_array (2 × 5 × 3)
array([[[1, 2, 3],
[1, 1, 1],
[2, 2, 2],
[0, 3, 3],
[0, 0, 4]],
[[1, 2, 3],
[2, 2, 2],
[3, 3, 3],
[0, 4, 4],
[0, 0, 5]]]).
对于 n 中的每一列 j,我想提取最后 2 个非零元素并计算平均值,然后将结果放入 (n by j) 数组中。我目前所做的是使用 for 循环
import numpy as np
a_3d_array = np.array([[[1, 2, 3],
[1, 1, 1],
[2, 2, 2],
[0, 3, 3],
[0, 0, 4]],
[[1, 2, 3],
[2, 2, 2],
[3, 3, 3],
[0, 4, 4],
[0, 0, 5]]])
aveCol = np.zeros([2,3])
for n in range(2):
for j in range(3):
temp = a_3d_array[n,:,j]
nonzero_array = temp[np.nonzero(temp)]
aveCol[n, j] = np.mean(nonzero_array[-2:])
得到想要的结果
print(aveCol)
[[1.5 2.5 3.5] [2.5 3.5 4.5]]
效果很好。但我想知道是否有更好的 Pythonic 方式来做同样的事情?
我发现与我的问题最相似的是here。但我不太明白在稍微不同的上下文中解释的答案。
【问题讨论】:
-
因为这是完全工作的代码;这可能会更好地放在codereview.stackexchange.com 上(如果您决定在那里发帖,请删除此问题)
-
谢谢 JeffUK,我不知道还有另一个合适的网站可以询问工作代码。由于我已经收到了 2 个对这篇文章的回答,所以这次我将把我的帖子留在这里。但是下次我会去其他网站!
-
好电话!他们是真正的代码审查专家,你会在那里得到很多很好的指导。
标签: python numpy multidimensional-array mean