Regression along a dimension in a numpy array
我有一个4维的numpy数组(x,y,z,time),并希望在每个x,y,z坐标处的时间维度上做一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import numpy as np n = 10 # size of my x,y,z dimensions degree = 2 # degree of my polyfit time_len = 5 # number of time samples # Make some data A = np.random.rand(n*n*n*time_len).reshape(n,n,n,time_len) # An x vector to regress through evenly spaced samples X = np.arange( time_len ) # A placeholder for the regressions regressions = np.zeros(n*n*n*(degree+1)).reshape(n,n,n,degree+1) # Loop over each index in the array (slow!) for row in range(A.shape[0] ) : for col in range(A.shape[1] ) : for slice in range(A.shape[2] ): fit = np.polyfit( X, A[row,col,slice,:], degree ) regressions[row,col,slice] = fit |
我想进入
调整数据的形状,使每个单独的切片位于2d数组的一列上。然后运行一次polyfit。
1 2 3 | A2 = A.reshape(time_len, -1) regressions = np.polyfit(X, A2, degree) regressions = regressions.reshape(A.shape) |
或者类似的东西……我不太了解您的数据集中的所有尺寸对应什么,所以我不确定您想要的形状是什么。但要注意的是,每个
顺便说一句,如果您对性能感兴趣,那么应该使用配置文件模块或类似的东西来配置代码。一般而言,您不能总是仅仅通过盯着它来预测代码将以多快的速度运行。您必须运行它。尽管在这种情况下,删除循环也将使您的代码更具可读性100倍,这甚至更为重要。