3 回答

TA貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊
Y = np.array([[1,2,3],[4,5,6]])
這將創(chuàng)建一個 (2,3) 數(shù)組。
v = np.append(Y, [[7,8,9]], axis=0)
這實際上是實現(xiàn)為
v = np.concatenate(( Y, np.array([[7,8,9]]) ), axis=0)
也就是說,它將 (2,3) 數(shù)組與軸 0 上的 (1,3) 連接起來形成 (3,3)。
q = np.append(Y,[[9],[10]], axis=1)
在這里,它在軸 1 上將 (2,3) 與 (2,1) 連接起來,得到 (2,4)
np.concatenate
除非您指定,否則假定軸為 0。它不會嘗試猜測哪個軸有效或無效。在這種q
情況下使用軸 0 會導(dǎo)致錯誤。
還concatenate
需要匹配維度數(shù)量以及非連接軸上的匹配大小。嘗試類似的事情np.concatenate((Y, [2,1]))
看看我的意思。
我不喜歡np.append
,因為它看起來太像列表附加,并且給初學(xué)者帶來了很多問題。如果沒有軸,它就會破壞輸入(如果不明顯,請閱讀文檔和代碼)。concatenate
對于 axis,它與(再次閱讀代碼) 相同。concatenate
接受許多數(shù)組的列表,而不僅僅是 2。 np.append
人為地將操作限制為 2。
np.vstack
、np.hstack
、 和np.column_stack
是在調(diào)用 之前以各種方式調(diào)整輸入尺寸的變體concatenate
。它們補(bǔ)償了一些不匹配,例如連接行時:
np.vstack((Y, [7,8,9]))
在連接之前將 (3,) 數(shù)組轉(zhuǎn)換為 (1,3)。實際上,這是一種方便且安全的“事后猜測”。它很少會出現(xiàn)諸如 之類的問題np.append
。
numpy
(和 Python)試圖避免歧義。與再次猜測用戶相比,更有可能引發(fā)錯誤。發(fā)展的趨勢是消除允許“破壞規(guī)則”的遺留案例。

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊
只是視覺上的補(bǔ)充:
# (3, 2) (3, 1)
#
# [[1, 4], | [[7],
# [2, 5], | [8],
# [3, 6]] | [9]],
# ---------
# [[7, 8]]
#
# (1, 2)
連接兩個數(shù)組時
數(shù)組必須具有相同的形狀,除了對應(yīng)的維度axis
# (i, j0 , k)
# + (i, j1, k) # (concatenate)
# ---------------
# = (i, j0+j1, k)
你是對的,當(dāng)將一維數(shù)組連接到二維數(shù)組時,軸參數(shù)應(yīng)該足以明確地組合兩個數(shù)組,即使沒有維度匹配,但嵌套括號有助于使這一點更加明確,

TA貢獻(xiàn)1827條經(jīng)驗 獲得超9個贊
append
與 非常相似concatenate
:它沿著現(xiàn)有軸合并兩個數(shù)組。括號是我們定義跨維度分布元素的方式。
Y
是形狀(2, 3)
。這意味著如果您想附加到第一個軸,額外的數(shù)據(jù)必須具有 shape (M, 3)
。如果要附加到第二個軸,新數(shù)據(jù)必須具有形狀(2, N)
。這可以推廣到任意數(shù)量的維度:新數(shù)組的所有維度(除了要附加的維度之外)都必須具有相同的形狀。
該數(shù)組[[7, 8, 9]]
具有M = 1
:其形狀為(1, 3)
,因此您可以將其附加到第一個軸就好了。這會向 . 添加額外的行Y
。如果您嘗試附加類似 的內(nèi)容[[7], [8], [9]]
,則會收到錯誤,因為形狀現(xiàn)在是(3, 1)
。如果你嘗試這樣做,你最終不會得到一個統(tǒng)一的數(shù)組。
該數(shù)組[[9], [10]]
具有N = 1
:其形狀為(2, 1)
,因此您可以將其附加到第二個軸。這會向Y
. [[9, 10]]
有形狀(1, 2)
,所以顯然它不起作用。
axis
該關(guān)鍵字沒有為您提供足夠信息的原因是您并不總是附加單行或列。舉個例子:
np.append(Y, Y, axis=0) np.append(Y, Y, axis=1)
添加回答
舉報