python - 对数组数组中不同形状的数组的列求和 - Python 3.x

标签 python arrays list performance numpy

我有一个包含二维数组的数组。 对于每个二维数组,我想对列求和,结果必须采用列形式。
我有一段代码可以做到这一点,但我觉得我没有最佳地利用 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 作为最后一步。但这种在列表和单个数组之间不断切换的成本很高。实际上,您应该尝试仅存储拆分和单个数组,即下面的 idxdata

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/

相关文章:

python - 使用 apply_along_axis 绘制

python - 无法在 Fedora 27 上的 Python2 virtualenv 中使用 mysqldb

用于 Openstack 登录的 Python 蜘蛛

java - 使用冒泡排序对数组进行排序,发现错误 - 需要 : variable,:值

c - 具有未定义长度但只有一个 int 元素的数组的目的是什么?

java - 动态创建多个列表

python - Flask 的 UserMixin 在 Django 中的等价物是什么?

python - 我可以在一个 numpy 操作中使用 "rotate"和 slice 吗?

python - -Python- 基于格式的排序列表

python - for 列表中的循环 - 替换为列表中的位置