增加3d numpy数组python中元素子集的元素

时间:2015-07-24 20:47:19

标签: python arrays numpy in-place

我有一个由

组成的3d列表
myArray = np.array([[[0]*n for i in range(m)] for j in range(o)])

我有一个循环遍历所有元素,并增加当前元素中存储的值和当前元素邻域中的一些元素:

myArray[xa:xb][ya:yb][za:zb] += 1.

其中xaxb等是根据循环中考虑的当前元素生成的,并不一定相同。换句话说,我想增加3D列表中给定子三角形的值。

但是,当我尝试解决myArray[xa:xb][0][0]时,我会得到一个长度大于len(myArray[0])的列表。更不用说myArray[xa:xb][ya:yb][za:zb] += 1会导致更多元素增加1而不是所需。

我可以通过使用三个嵌套for循环来实现这一点:

for i in range(xa,xb+1):
    for j in range(ya,yb+1):
        for k in range(za,zb+1):
            myArray[i][j][k] += 1

但这会大大减慢代码的速度。 如果没有这样的性能损失,我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

你从一开始就走在正确的道路上。以下似乎有效:

myArray=np.zeros((o,m,n))
myArray[xa:xb+1,ya:yb+1,za:zb+1]+=1

请注意,数组中的索引切片在range循环中使用与for相同的边界,因此您必须+1结束索引。上面的过程会在很短的时间内复制您的三for个循环结果。