我有一个包含二维数组的数组。
对于每个二维数组,我想对列求和,结果必须采用列形式。
我有一段代码可以做到这一点,但我觉得我没有最佳地利用 numpy。什么是最快做到这一点?
我当前的代码:
temp = [np.sum(l_i,axis=1).reshape(-1,1) for l_i in self.layer_inputs]
示例数组:
array([
array([[ 0.48517904, -11.10809746],
[ 13.64104864, 5.77576326]]),
array([[16.74109924, -3.28535518],
[-4.00977275, -3.39593759],
[ 5.9048581 , -1.65258805],
[13.40762143, -1.61158724],
[ 9.8634849 , 8.02993728]]),
array([[-7.61920427, -3.2314264 ],
[-3.79142779, -2.44719713],
[32.42085005, 4.79376209],
[13.97676962, -1.19746096],
[45.60100807, -3.01680368]])
], dtype=object)
预期结果示例:
[array([[-10.62291842],
[ 19.41681191]]),
array([[13.45574406],
[-7.40571034],
[ 4.25227005],
[11.7960342 ],
[17.89342218]]),
array([[-10.85063067],
[ -6.23862492],
[ 37.21461214],
[ 12.77930867],
[ 42.58420439]]) ]
最佳答案
新答案
考虑到您对数组列表的严格要求,没有比计算效率更高的解决方案了。
原始答案
要利用 NumPy,请勿使用数组列表:dtype=object
提示您将无法使用矢量化运算。
相反,合并成一个数组,例如通过np.vstack,并存储分割索引。如果您需要数组列表,请使用 np.split 作为最后一步。但这种在列表和单个数组之间不断切换的成本很高。实际上,您应该尝试仅存储拆分和单个数组,即下面的 idx
和 data
。
idx = np.array(list(map(len, A))).cumsum()[:-1] # [2, 7]
data = np.vstack(A).sum(1)
关于python - 对数组数组中不同形状的数组的列求和 - Python 3.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250846/