numpy 辨異(三)—— hstack/column_stack,linalg.eig/linalg.eigh_numpy

來源:互聯網
上載者:User
1. np.hstack np.column_stack
>>> np.hstack([np.array([1, 2, 3]), np.array([4, 5, 6])])array([1, 2, 3, 4, 5, 6])>>> np.column_stack([np.array([1, 2, 3]), np.array([4, 5, 6])])array([[1, 4],       [2, 5],       [3, 6]])

當然對等地,也存在,np.vstack, np.row_stack

>>> np.vstack([np.array([1, 2, 3]), np.array([4, 5, 6])])array([[1, 2, 3],       [4, 5, 6]])>>> np.row_stack([np.array([1, 2, 3]), np.array([4, 5, 6])])array([[1, 2, 3],       [4, 5, 6]])                            # 兩者近乎等效
2. np.linalg.eig() np.linalg.eigh()

首先一點,不管二者處理的是不是對稱陣,兩者處理的首先是方陣(square array)。

兩者均用於矩陣特徵分解,np.linalg.eigh()適用於對稱矩陣,可見矩陣分析中針對對稱矩陣的特徵值分解有一套特殊的不同於一般矩陣的理論。

def main():    X = np.random.randn(3, 3)    X = X.triu()    X += (X.T-np.diag(X.diagonal()))                        # 構造對稱矩陣 X    Lambda1, Q1 = np.linalg.eig(X)      Lambda2, Q2 = np.linalg.eigh(X)    print(Lambda1)                # [ 1.53176315 -0.35907022 -1.8924684 ]                # 排序不太嚴格    print(Lambda2)                # [-1.8924684  -0.35907022  1.53176315]                # 嚴格的升序if __name__ == '__main__':    main()
3. array.T vs array.transpose()

形式上array.T自然比array.transpose()這樣一個函數調用形式稍顯簡潔。

>>> x = np.ones((3, 4))>>> x.Tarray([[ 1.,  1.,  1.],       [ 1.,  1.,  1.],       [ 1.,  1.,  1.],       [ 1.,  1.,  1.]])>>> x.transpose()array([[ 1.,  1.,  1.],       [ 1.,  1.,  1.],       [ 1.,  1.,  1.],       [ 1.,  1.,  1.]])

事實上,x.T == x.transpose(range(x.ndim)[::-1])

>>> x.transpose(range(x.ndim)[::-1])array([[ 1.,  1.,  1.],       [ 1.,  1.,  1.],       [ 1.,  1.,  1.],       [ 1.,  1.,  1.]])
4. np.triu np.tril

np.triu:upper triangle of an array
np.tril:lower triangle of an array

>>> x = np.array([[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9]])>>> xarray([[1, 2, 3],       [3, 4, 5],       [5, 6, 7],       [7, 8, 9]])>>> np.triu(x)array([[1, 2, 3],       [0, 4, 5],       [0, 0, 7],       [0, 0, 0]])>>> np.tril(x)array([[1, 0, 0],       [3, 4, 0],       [5, 6, 7],       [7, 8, 9]])
5. concatenate與hstack/vstack

注意,要進行拼接的數組都是以tuple_like((a, b))的形式傳遞給這三個函數的,

np.concatenate((a, b), axis=0) == np.vstack((a, b))                    # 也對應於預設的情況,np.concatenate((a, b)) np.concatenate((a, b), axis=1) == np.hstack((a, b))

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.