【发布时间】:2015-05-09 03:46:59
【问题描述】:
给定一个 numpy ndarray,我想取前两个轴,并用一个新轴替换它们,这是它们的对角线之和。
特别是,假设我有变量 x,y,z,...,并且我的数组的条目代表概率
array[i,j,k,...] = P(x=i, y=j, z=k, ...)
我想获得
new_array[l,k,...] = P(x+y=l, z=k, ...) = sum_i P(x=i, y=l-i, z=k, ...)
即new_array[l,k,...] 是所有array[i,j,k,...] 的总和,这样i+j=l。
在 numpy 中最有效和/或最干净的方法是什么?
编辑添加: 根据@hpaulj 的推荐,这里是明显的迭代解决方案:
array = numpy.arange(30).reshape((2,3,5))
array = array / float(array.sum()) # make it a probability
new_array = numpy.zeros([array.shape[0] + array.shape[1] - 1] + list(array.shape[2:]))
for i in range(array.shape[0]):
for j in range(array.shape[1]):
new_array[i+j,...] += array[i,j,...]
new_array.sum() # == 1
【问题讨论】:
-
给我们明显的迭代解决方案。如果有工作示例可供测试,则更容易提出改进建议。
-
最干净的是定义
P(x,y,z)和P1(l,z,fn)。第二个负责迭代可能的x,y值并将它们应用于您的fn=P。P1不能被矢量化(提高效率),除非P本身被矢量化。
标签: python arrays numpy multidimensional-array scipy