2017-05-11 44 views
0

我有三個矩陣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

+0

我是一個簡單代理。我知道如果有情況,我可以寫一百萬,但是如果python有一個可以幫助我的內置技巧,那麼情況並非如此。 –

+0

你可以創建一個空的/ 1或0的所需形狀的數組,然後用軸A,B和/或C的值填充該軸的當前可用的值。 – NaN

回答

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) 
+0

真棒答案,謝謝。 –

0

也許有一個更優雅的版本,但你可以使用「如果」的順序:如下

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 

我希望我幫助你,良好的工作

0

做到這一點的最好辦法:

  • 初始化對應於A,B和C 矩陣的三個變量a,b和c,並將它們設置爲零。
  • 現在,無論A,B 和C的分配發生在哪裏,分別更改變量a,b和c 的值。
  • 完成所有的分配後,您將會知道哪個 其中一個是使用a,b和c的None。