如何处理与空矩阵的连接

时间:2017-05-11 11:51:10

标签: python numpy matrix concatenation

我有三个矩阵A,B,C,它们都有相同的行数。 我想创建一个新的矩阵D,它是A,B,C相对于列的串联。

这是我非常简单的代码

A = numpy.concatenate((A, numpy.concatenate((B, C), axis=1))), axis=1)

当所有矩阵都存在时,它很好并按预期工作。

但有时我可能只有A,或只有B C等。有时一两个可能是空的。在这些情况下,程序将失败。

处理此问题的最佳和最有效的方法是什么?如果例如B不存在,我们将有B = None

3 个答案:

答案 0 :(得分:2)

首先,您可以将两次调用合并到concatenate

result = numpy.concatenate((A, B, C), axis=1)

然后有两个选项 - 过滤掉None s:

arrs = [a for a in (A, B, C) if a is not None]
result = numpy.concatenate(arrs, axis=1)

或者更好的是,实际上使用"空"数组,而不是传递None

A = np.random.randn(3, 5)  # your actual data
B = np.zeros((3, 0))  # set to something with the same height as A, not None
C = np.zeros((3, 0))  # still 3 rows, but each row is empty
result = numpy.concatenate((A, B, C), axis=1)

答案 1 :(得分:0)

也许有一个更优雅的版本但你可以使用“if”序列:

if not A is None and not B is None and not C is None:
    X = numpy.concatenate((A, numpy.concatenate((B, C), axis=1)), axis=1)
elif A is None:
    if not B is None and not C is None:
        X = numpy.concatenate((B, C), axis=1)   
    elif B is None:
        X = C
    else:
        X = B
elif B is None:
    if not A is None and not C is None:
        X = numpy.concatenate((A, C), axis=1)   
    elif A is None:
        X = C
    else:
        X = A
elif C is None:
    if not A is None and not B is None:
        X = numpy.concatenate((A, B), axis=1)   
    elif A is None:
        X = B
    else:
        X = A
else:
    X = None

我希望我帮助你,做好工作

答案 2 :(得分:0)

最好的方法如下:

  • 初始化对应于A,B和C的三个变量a,b和c 矩阵并将它们设置为零。
  • 现在,无论在哪里分配A,B 和C正在发生,改变变量a,b和c的值 分别
  • 完成所有作业后,您将了解哪一项 一个是使用a,b和c的无。