Python结构化数组而不是许多单个数组

时间:2018-01-15 15:52:00

标签: python arrays numpy scipy

我是结构化阵列的新手,但我认为这就是我所需要的。

我有一个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条件?

1 个答案:

答案 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       ]]]