是否可以根据take功能的工作原理分配一个numpy数组?
例如,如果我有一个数组a,一个索引列表inds和一个所需的轴,我可以使用如下:
import numpy as np
a = np.arange(12).reshape((3, -1))
inds = np.array([1, 2])
print(np.take(a, inds, axis=1))
[[ 1 2]
[ 5 6]
[ 9 10]]
Run Code Online (Sandbox Code Playgroud)
当所需的索引/轴在运行时可能发生变化时,这非常有用.
但是,numpy不允许你这样做:
np.take(a, inds, axis=1) = 0
print(a)
Run Code Online (Sandbox Code Playgroud)
看起来这个通道有一些有限的(1-D)支持numpy.put,但我想知道是否有更清洁的方法来做到这一点?
我有一些numpy.array带有较小值的多维s,我需要将它们相加且数值误差很小。对于floats,这里有math.fsum(及其实现在此处),对我一直很好。numpy.sum不够稳定。
如何获得numpy.arrays 的稳定求和?
背景
这是用于Quadpy软件包的。小值数组是在(许多)时间间隔的特定点上乘以其权重的函数求值。这些总和是所述函数在间隔上的积分的近似值。
我想要一个易于读取访问多维numpy数组的某些部分.对于任何访问第一个维度的数组都是easy(b[index]).另一方面,访问第六维是"硬"(特别是阅读).
b[:,:,:,:,:,index] #the next person to read the code will have to count the :
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?特别是有一种方法,在编写程序时轴是不知道的吗?
编辑:索引维度不一定是最后一个维度