Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3d numpy数组中元素子集的增量元素_Python_Arrays_Numpy_In Place - Fatal编程技术网

Python 3d numpy数组中元素子集的增量元素

Python 3d numpy数组中元素子集的增量元素,python,arrays,numpy,in-place,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. 其中,xa,xb等根据循环中考虑的当前元素生成,但不一定相同。换句话说,我想增加3D列表中给定子三角形的值 但是,当我尝试寻址myArray[xa:xb][0][0]时,我得到一个长度

我有一个3d列表,由

myArray = np.array([[[0]*n for i in range(m)] for j in range(o)])
我有一个循环,它运行在所有元素上,并递增存储在当前元素中的值和当前元素附近的许多元素:

myArray[xa:xb][ya:yb][za:zb] += 1.
其中,
xa
xb
等根据循环中考虑的当前元素生成,但不一定相同。换句话说,我想增加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
但这会大大降低代码的速度。
我该怎么做才能在不损失性能的情况下实现这一目标?

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

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

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

提示-您可以将第一行写为
myArray=np.zeros((o,m,n))
,并使用
myArray.shape
myArray[xa:xb][0]检查数组或切片的尺寸,等等。
myArray
的维度可能与您期望的顺序不符。另外,我不建议使用
o
作为变量名…@YXD谢谢。我认为问题在于
myArray[xa:xb][0]
仍然是一个2D数组,相当于
myArray[xa]