![](/img/trans.png)
[英]How to do the best practice in avoiding numpy.random.seed according to the numpy documentation?
[英]how vstack works according to numpy documentation
Python初學者在這里。
在通過 numpy 文檔之后,它說 vstack 等效於在形狀 (N,) 的一維數組被重新整形為 (1,N) 之后沿第一個軸的串聯。
所以下面的代碼
a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.vstack((a,b))
應該
np.concatenate((a,b),axis=0))
將所有一維數組從 (1,) 重塑為 (1,1) 后
將是
[[[1]]
[[2]]
[[3]]]
b 將是
[[[2]]
[[3]]
[[4]]]
所以,
np.concatenate((a,b),axis=0)
應該
[[[1]]
[[2]]
[[3]]
[[2]]
[[3]]
[[4]]]
但結果顯示
[[1]
[2]
[3]
[2]
[3]
[4]]
我這邊有什么誤解嗎? 請弄清楚我哪里出錯了?
這是代碼:
def vstack(tup):
arrs = np.atleast_2d(*tup)
if not isinstance(arrs, list):
arrs = [arrs]
return np.concatenate(arrs, 0)
所以它只是確保輸入是一個(至少)二維數組的列表,並在第一個軸上進行連接。
你的數組已經是二維的,所以它只是
In [45]: a = np.array([[1], [2], [3]])
...: b = np.array([[2], [3], [4]])
In [46]: a
Out[46]:
array([[1],
[2],
[3]])
In [47]: b
Out[47]:
array([[2],
[3],
[4]])
In [48]: np.concatenate((a,b), axis=0)
Out[48]:
array([[1],
[2],
[3],
[2],
[3],
[4]])
你的“應該”
In [49]: np.concatenate((a[...,None],b[...,None]), axis=0)
Out[49]:
array([[[1]],
[[2]],
[[3]],
[[2]],
[[3]],
[[4]]])
In [50]: _.shape
Out[50]: (6, 1, 1)
添加維度很重要的情況,將 (3,) 數組更改為 (1,3):
In [51]: np.vstack((a.ravel(),b.ravel()))
Out[51]:
array([[1, 2, 3],
[2, 3, 4]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.