【发布时间】:2016-07-05 15:40:51
【问题描述】:
我通过沿 numpy ndarray(可以是任何维度)的轴(可以是任何轴)循环向量来处理数据。
我没有直接处理数组,因为数据并不完美。它需要对每个载体进行质量控制。如果不好,向量将被零(或nan)填充,并且没有真正的处理。
我发现this Q 类似,但我的问题要困难得多,因为
-
ndim是任意的。
对于 3D 数组,我可以像这样沿 axis 1 获取向量
x = np.arange(24).reshape(2,3,4)
for i in range(x.shape[0]):
for k in range(x.shape[2]):
process(x[i,:,k])
但是如果ndim和取到的axis不固定,怎么取向量呢?
- 获取向量的轴是任意的。
我正在考虑的一种可能方式是
y = x.swapaxes(ax,-1)
# loop over vectors along last axis
for i in np.ndindex(y.shape[:-1]):
process(y[i+(slice(None),)])
# then swap back
z = y.swapaxes(ax,-1)
但我怀疑这种方法的效率。
【问题讨论】:
-
最有效的方法是不迭代/循环,即修改(如果尚不适用)
process以一次性处理所有切片。那么,您是否使用特定的process函数?如果没有,请查看np.vectorize我认为。 -
我没有直接在数组上工作,因为数据数组并不完美。它需要对每个载体进行质量控制。如果不好,向量将被零(或nan)填充。
-
取决于函数
process和循环的数量,使用numba的jit装饰器可能是值得的 -
您能否详细说明为什么要以线性向量而不是整个数组来处理数据
-
在最后一个示例中您不需要
swapaxes- 请参阅我的编辑。