亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們在使用 Numpy 追加列和行時對括號的使用不同?

為什么我們在使用 Numpy 追加列和行時對括號的使用不同?

明月笑刀無情 2023-09-05 17:33:34
我正在通過 Udacity 課程學習 NumPy。我們創建一個 2D 矩陣,然后創建另外 2 個數組,一個附加一行,另一個附加一列:Y = np.array([[1, 2, 3], [4, 5, 6]]) v = np.append(Y, [[7, 8, 9]], axis=0) q = np.append(Y, [[9], [10]], axis=1)為什么這兩種情況下值列表的語法(使用方括號)不同?我意識到括號的使用與我們創建原始矩陣的順序相匹配,但解釋器似乎對參數有足夠的信息axis=n,不是嗎?
查看完整描述

3 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

Y = np.array([[1,2,3],[4,5,6]])

這將創建一個 (2,3) 數組。

v = np.append(Y, [[7,8,9]], axis=0)

這實際上是實現為

v = np.concatenate(( Y, np.array([[7,8,9]]) ), axis=0)

也就是說,它將 (2,3) 數組與軸 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 會導致錯誤。

concatenate需要匹配維度數量以及非連接軸上的匹配大小。嘗試類似的事情np.concatenate((Y, [2,1]))看看我的意思。

我不喜歡np.append,因為它看起來太像列表附加,并且給初學者帶來了很多問題。如果沒有軸,它就會破壞輸入(如果不明顯,請閱讀文檔和代碼)。concatenate對于 axis,它與(再次閱讀代碼) 相同。concatenate接受許多數組的列表,而不僅僅是 2。 np.append人為地將操作限制為 2。

np.vstack、np.hstack、 和np.column_stack是在調用 之前以各種方式調整輸入尺寸的變體concatenate。它們補償了一些不匹配,例如連接行時:

np.vstack((Y, [7,8,9]))

在連接之前將 (3,) 數組轉換為 (1,3)。實際上,這是一種方便且安全的“事后猜測”。它很少會出現諸如 之類的問題np.append。

numpy(和 Python)試圖避免歧義。與再次猜測用戶相比,更有可能引發錯誤。發展的趨勢是消除允許“破壞規則”的遺留案例。


查看完整回答
反對 回復 2023-09-05
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

只是視覺上的補充:


#  (3, 2)     (3, 1)

# [[1, 4],  |  [[7],

#  [2, 5],  |   [8],

#  [3, 6]]  |   [9]],

# --------- 

# [[7, 8]]   

#

#  (1, 2)

連接兩個數組時


數組必須具有相同的形狀,除了對應的維度axis


#   (i, j0   , k)

# + (i,    j1, k)  # (concatenate)

# ---------------

# = (i, j0+j1, k)

你是對的,當將一維數組連接到二維數組時,軸參數應該足以明確地組合兩個數組,即使沒有維度匹配,但嵌套括號有助于使這一點更加明確,


查看完整回答
反對 回復 2023-09-05
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

append與 非常相似concatenate:它沿著現有軸合并兩個數組。括號是我們定義跨維度分布元素的方式。

Y是形狀(2, 3)。這意味著如果您想附加到第一個軸,額外的數據必須具有 shape (M, 3)。如果要附加到第二個軸,新數據必須具有形狀(2, N)。這可以推廣到任意數量的維度:新數組的所有維度(除了要附加的維度之外)都必須具有相同的形狀。

該數組[[7, 8, 9]]具有M = 1:其形狀為(1, 3),因此您可以將其附加到第一個軸就好了。這會向 . 添加額外的行Y。如果您嘗試附加類似 的內容[[7], [8], [9]],則會收到錯誤,因為形狀現在是(3, 1)。如果你嘗試這樣做,你最終不會得到一個統一的數組。

該數組[[9], [10]]具有N = 1:其形狀為(2, 1),因此您可以將其附加到第二個軸。這會向Y[[9, 10]]有形狀(1, 2),所以顯然它不起作用。

axis該關鍵字沒有為您提供足夠信息的原因是您并不總是附加單行或列。舉個例子:

np.append(Y, Y, axis=0)
np.append(Y, Y, axis=1)


查看完整回答
反對 回復 2023-09-05
  • 3 回答
  • 0 關注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號