[英]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.