簡體   English   中英

Numpy 將二維 arrays 附加在一起

[英]Numpy appending two-dimensional arrays together

我正在嘗試創建一個 function 對二維矩陣求冪並將結果保存在 3D 數組中,其中第一個維度是指數的索引。 這很重要,因為我正在求冪的矩陣的行表示有關圖上不同頂點的信息。 因此,例如,如果我們有 A、A^2、A^3,每個都是形狀 (50,50),我想要一個矩陣 D = (3,50,50),這樣我就可以 go D[:,1,: ] 檢索有關節點 1 的所有信息,並能夠對其進行矩陣乘法。 我的代碼目前是

def expo(times,A,n):
    temp = A;
    result = csr_matrix.toarray(temp)
    for i in range(0,times):
        temp = np.dot(temp,A)
        if i == 0:
            result = np.array([result,csr_matrix.toarray(temp)]) # this creates a (2,50,50) array
        if i > 0:
            result = np.append(result,csr_matrix.toarray(temp),axis=0) # this does not work
    return result

但是,這不起作用,因為在“i>0”的情況下,臨時數組的形狀為 (50,50) 並且無法附加。 我不確定如何完成這項工作,而且我對 Numpy 中的維度感到困惑,例如為什么有時認為是 (50,1) 而其他時候只是 (50,)。 任何人都可以幫助我使此代碼正常工作並大致解釋這些事情應該如何在 Numpy 中完成?

文檔參考

如果要在 numpy 中堆疊矩陣,可以使用stack function 如果您還希望索引對應於指數,您可能需要在 output 的開頭添加一個單位矩陣:

MWE

import numpy as np

def expo(A, n):
    result =[np.eye(len(A)), A,]
    for _ in range(n-1):
        result.append(result[-1].dot(A))

    return np.stack(result, axis=0) 
    # If you do not really need the 3D array, 
    # you could also just return the list


result = expo(np.array([[1,-2],[-2,1]]), 3)
print(result)
# [[[  1.   0.]
#   [  0.   1.]]
#
#  [[  1.  -2.]
#   [ -2.   1.]]
#
#  [[  5.  -4.]
#   [ -4.   5.]]
#
#  [[ 13. -14.]
#   [-14.  13.]]]

print(result[1])
# [[ 1. -2.]
#  [-2.  1.]]

注釋

如您所見,我們首先簡單地創建矩陣列表,然后在最后將它們轉換為數組。 我不確定您是否真的需要 3D 數組,因為您也可以只索引創建的列表,但這取決於您的用例,如果方便與否。

我猜想很多 numpy 函數的axis關鍵字參數一開始可能會令人困惑,但文檔通常有很好的例子,結合相同的試驗和錯誤,應該會讓你走得很遠。 例如對於numpy.stack ,第一個示例確實正是您想要做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM