【发布时间】:2018-07-25 07:59:06
【问题描述】:
我有两个要按元素添加的 5D 矩阵。这些矩阵具有完全相同的维度和元素数量,但它们都包含随机分布的 NaN 值。
我想以一种有效的方式逐元素添加这两个矩阵。我目前正在通过逐元素循环来添加它们,但是这个循环大约需要 40 分钟,我只是认为必须有一种更有效的方法。
我认为一种有效的方法是,如果可以使用 numpy.nansum 来添加它们,但据我所知,numpy.nansum 仅适用于一维数组。
如果添加像 numpy.nansum (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.nansum.html) 那样下降,我会更喜欢它。即,(1)如果添加两个值,我希望总和是一个值,(2)如果添加一个值和一个 NaN,我希望总和是值,(3)如果添加两个 NaN,我想要总和为 NaN。
下面是一个示例代码:
import numpy as np
# Creating fake data
A = np.arange(0,720,1).reshape(2,3,4,5,6)
B = np.arange(720,1440,1).reshape(2,3,4,5,6)
# Assigning some elements as NaN
A[0,1,2,3,4] = np.nan
A[1,2,3,4,5] = np.nan
B[1,2,3,4,5] = np.nan
所以,如果我现在添加 A 和 B(假设 C = A + B),我希望元素 C[0,1,2,3,4] 成为 B[0,1,2, 3,4],元素C[1,2,3,4,5]为NaN,C中所有其他元素为A和B中分别添加的元素之和。
有人对此添加有有效的解决方案吗?
【问题讨论】:
-
你试过屏蔽吗?也就是说,进行通常的求和,然后使用掩码赋值(布尔索引)将不需要的
nan替换为正确的值。可能需要两个这样的步骤。 -
@hpaulj 感谢您的回复!我没有尝试过,但我确实考虑过屏蔽。但是当您(i)添加一个掩码值和一个实际值以及(ii)两个掩码值时会发生什么。 (i) 和 (ii) 返回什么结果(总和)?
-
我认为@hpaulj 的意思是先添加,然后使用掩码替换错误的
nans -
对,好吧,我想这会起作用,但在我看来,这也需要循环遍历大矩阵,这就是我试图避免的,因为我现在已经在这样做了,而且非常耗时(实际矩阵的大小为 [2000,200,400])。
标签: python python-2.7 numpy