【发布时间】:2017-12-20 19:54:05
【问题描述】:
假设我有以下numpy array:
a = np.array([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0], [1.0, 2.0, 3.0]])
我想要这样的累积和数组:
a.cumsum(axis=1)
array([[ 1., 3., 6.],
[ 1., 3., 6.],
[ 1., 3., 6.]])
有没有办法对三角数组/矩阵做同样的事情?
b = np.array([[1.0, 2.0, 3.0], [2.0, 3.0], [3.0]])
基本上如下结果:
array([[1.0, 2.0, 3.0], [2.0, 5.0], [3.0]], dtype=object)
我尝试了以下方法,但收到以下错误消息:
b.cumsum(axis=1)
Traceback (most recent call last):
File "C:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-76-831556b68f3f>", line 1, in <module>
b.cumsum(axis=1)
ValueError: axis(=1) out of bounds
我是否应该尝试重新定义 b 以获得 nan 值?我想避免在较小数组的末尾添加零(我的真实数组可能包含零,这对我来说与根本没有值不同)。
【问题讨论】:
-
我认为这个词是“参差不齐的数组/矩阵”。因此,您可以简单地循环遍历每个元素并应用 cumsum。后续问题 - 你是如何得到这样一个数组/矩阵的?
-
替代建议,如果您从 a 获取 b - 使用
np.triu(a).cumsum(1),然后删除每行的前导零,可能使用另一个triu掩码,具体取决于最终预期的 o/p。 -
如果您想以经济的方式存储三角形数组,请使用 LAPACK 标准。这只是在使用
object数据类型浪费大量性能
标签: arrays numpy matrix cumsum