我是结构化阵列的新手,但我认为这就是我所需要的。
我有一个numpy数组,它为每个条目包含一个减号计数器和一个包含加号计数器的数组。它们在一个过程中被填充。在这个过程结束时,我想通过减计数器将每个单元的所有正计数器单元划分,并将其保存在一个数组中,并在每个条目中计算结果。
所以我认为有一种更好的方法来创建具有相同大小的三个不同阵列。让我们假设我的数组采用以下形式:
import numpy as np
import itertools
plusArr = np.ones((20 ,39, 90))
minusArr = np.ones((20 ,39, 90))
resultArr = np.zeros((20 ,39, 90))
然后细胞充满数字。最后我做了类似的事情:
for i in itertools.product(np.arange(0,20,1),np.arange(0,39,1),np.arange(0,90,1)):
resultArr[i[0]][i[1]][i[2]] = plusArr[i[0]][i[1]][i[2]]/minusArr[i[0]][i[1]][i[2]]
print(resultArr)
这有效,但在填充过程中,查找minus和plus数组的相同输入位置非常耗时。所以我想可能有一个带三元而不是i
int条目的结构化数组。在每个三元组中,第一个条目是加号计数器,第二个条目是减号计数器,最后一个条目是0,直到填充过程结束,并且可以用加号和减号条目的除法结果填充。
作为一个小问题。如果我的一个计数器条目为0,那么我想填充该位置没有零条目的数组条目的结果单元格。是否有一种聪明的方式可以做到这一点,或只是一个if条件?
答案 0 :(得分:1)
Numpy允许直接在数组上逐个元素算术运算。此外,还有一大堆math routines可用。
按元素划分的元素非常简单:
result_arr = plus_arr / minus_arr
import numpy as np
size = (1, 2, 3)
plus_arr = np.ones(size)
minus_arr = np.ones(size) * 2
minus_arr[0, 0, 0] = 3
result_arr = plus_arr / minus_arr
print(plus_arr)
print(minus_arr)
print(result_arr)
[[[ 1. 1. 1.]
[ 1. 1. 1.]]]
[[[ 3. 2. 2.]
[ 2. 2. 2.]]]
[[[ 0.33333333 0.5 0.5 ]
[ 0.5 0.5 0.5 ]]]