簡體   English   中英

Python數組/矩陣尺寸

[英]Python array/matrix dimension

我創建兩個矩陣

import numpy as np
arrA = np.zeros((9000,3))
arrB = np.zerros((9000,6))

我想連接那些矩陣的片段。 但是當我嘗試做的時候:

arrC = np.hstack((arrA, arrB[:,1]))

我收到一個錯誤:

ValueError: all the input arrays must have same number of dimensions

我猜這是因為np.shape(arrB[:,1])等於(9000,)而不是(9000,1) ,但是我不知道該怎么解決。

您能對此問題發表評論嗎?

您可以通過傳遞索引列表而不是索引來保留維度:

>>> arrB[:,1].shape
(9000,)
>>> arrB[:,[1]].shape
(9000, 1)
>>> out = np.hstack([arrA, arrB[:,[1]]])
>>> out.shape
(9000, 4)

我會嘗試這樣的事情:

np.vstack((arrA.transpose(), arrB[:,1])).transpose()

有幾種方法可以從arrB選擇(9000,1)數組:

np.hstack((arrA,arrB[:,[1]]))
np.hstack((arrA,arrB[:,1][:,None]))
np.hstack((arrA,arrB[:,1].reshape(9000,1)))
np.hstack((arrA,arrB[:,1].reshape(-1,1)))

一個使用索引數組或列表的概念,第二個添加新軸(例如np.newaxis ),第三個使用reshape 這些都是基本的numpy數組操作任務。

這在視覺上更容易看到。

假設:

>>> arrA=np.arange(9000*3).reshape(9000,3)
>>> arrA
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [26991, 26992, 26993],
       [26994, 26995, 26996],
       [26997, 26998, 26999]])
>>> arrB=np.arange(9000*6).reshape(9000,6)
>>> arrB
array([[    0,     1,     2,     3,     4,     5],
       [    6,     7,     8,     9,    10,    11],
       [   12,    13,    14,    15,    16,    17],
       ..., 
       [53982, 53983, 53984, 53985, 53986, 53987],
       [53988, 53989, 53990, 53991, 53992, 53993],
       [53994, 53995, 53996, 53997, 53998, 53999]])

如果您對arrB進行切片,則會生成一系列看起來更像一行的序列:

>>> arrB[:,1]
array([    1,     7,    13, ..., 53983, 53989, 53995])

您需要的是形狀與要添加到arrA的列形狀相同的列:

>>> arrB[:,[1]]
array([[    1],
       [    7],
       [   13],
       ..., 
       [53983],
       [53989],
       [53995]])

然后,hstack按預期工作:

>>> arrC=np.hstack((arrA, arrB[:,[1]]))
>>> arrC
array([[    0,     1,     2,     1],
       [    3,     4,     5,     7],
       [    6,     7,     8,    13],
       ..., 
       [26991, 26992, 26993, 53983],
       [26994, 26995, 26996, 53989],
       [26997, 26998, 26999, 53995]])

另一種形式是在.reshape()在一維中指定-1,在另一維中指定所需的行數或列數:

>>> arrB[:,1].reshape(-1,1)  # one col
array([[    1],
       [    7],
       [   13],
       ..., 
       [53983],
       [53989],
       [53995]])
>>> arrB[:,1].reshape(-1,6)   # 6 cols
array([[    1,     7,    13,    19,    25,    31],
       [   37,    43,    49,    55,    61,    67],
       [   73,    79,    85,    91,    97,   103],
       ..., 
       [53893, 53899, 53905, 53911, 53917, 53923],
       [53929, 53935, 53941, 53947, 53953, 53959],
       [53965, 53971, 53977, 53983, 53989, 53995]])
>>> arrB[:,1].reshape(2,-1)  # 2 rows
array([[    1,     7,    13, ..., 26983, 26989, 26995],
       [27001, 27007, 27013, ..., 53983, 53989, 53995]])

這里有更多關於數組整形和堆棧的信息

暫無
暫無

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

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