Python结构化数组而不是许多单个数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python结构化数组而不是许多单个数组相关的知识,希望对你有一定的参考价值。
我是结构化阵列的新手,但我认为这就是我所需要的。
我有一个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)
这可以工作,但在填充过程中,查找减号和加号数组的相同输入位置非常耗时。所以我想可能有一个结构化数组,其中包含三元组而不是i
int条目。在每个三元组中,第一个条目是加号计数器,第二个条目是减号计数器,最后一个条目是0,直到填充过程结束,并且可以用加号和减号条目的除法结果填充。
作为一个小问题。如果我的一个计数器条目为0,那么我想填充该位置没有零条目的数组条目的结果单元格。是否有一种聪明的方式来做到这一点或只是一个if条件?
答案
Numpy允许直接在数组上逐个元素算术运算。此外,还有一大堆math routines可用。
Code:
按元素划分的元素非常简单:
result_arr = plus_arr / minus_arr
Test Code:
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)
Test Results:
[[[ 1. 1. 1.]
[ 1. 1. 1.]]]
[[[ 3. 2. 2.]
[ 2. 2. 2.]]]
[[[ 0.33333333 0.5 0.5 ]
[ 0.5 0.5 0.5 ]]]
以上是关于Python结构化数组而不是许多单个数组的主要内容,如果未能解决你的问题,请参考以下文章
pmml4s model.predict() 返回数组而不是单个值
如何使函数在映射数组中的单个项目而不是数组中的每个项目上执行?