看板 Python 關於我們 聯絡資訊
大家好, 我在使用numpy時遇到了下面的問題 >>>import numpy as np >>>a = np.array([[1,2,3,4],[5,6,7,8]]) >>>a[0] array([1,2,3,4]) >>>a[: 1] array([[1,2,3,4]]) >>>a[0].shape (4,) >>>a[: 1].shape (1,4) a[: 1]是誤打誤撞試出來的 想請問a[: 1]這個寫法為什麼可以得到1*4的array 謝謝大家幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.245.185 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1510417522.A.D05.html
AndyLee76: 就取出矩陣的第一個row啊 11/12 01:18
a[0]也是取出row 可是他的外面不會多一對中括號 想問為什麼slice的寫法會多一對中括號 因為在使用的function需要2維array當引數 不能是1維的
pups003: 多開幾個維度試試看就知道了 11/12 01:39
※ 編輯: ChuYoYo0719 (140.116.245.185), 11/12/2017 01:44:02 ※ 編輯: ChuYoYo0719 (140.116.245.185), 11/12/2017 01:55:28
vfgce: a[0]在這是取第0個row資料,維度降一.a[:1]是用slicea取一個 11/12 08:02
vfgce: 範圍內的資料,維度沒減,所以當然是二個括號(二維),你的例子 11/12 08:03
vfgce: 只是剛好你取的slice只有一個而已,讓你想不通....把你的資 11/12 08:04
vfgce: 料弄到3X3,試看看a[:1],a[:2],a[1:1],a[0],a[1],a[2].... 11/12 08:05
vfgce: 打錯,不是a[1:1]是a[1:2]... 11/12 08:08
我後來有試著改變slice的範圍,有理解了slice是取範圍內的資料所以不會降維 那一般要取第i個不會降維的row, 都是用a[i:i-1]這種寫法, 還是有另外的方式 (google關鍵字有降維只會找到PCA ~"~ ) ※ 編輯: ChuYoYo0719 (140.116.245.185), 11/12/2017 12:14:03
vfgce: PCA跟這無關,我說的降維純指ndim減一. 11/12 19:14
vfgce: 在你資料中,想取維持二維的單一row資料, 11/12 19:16
vfgce: 可以用a[0,np.newaxis] 11/12 19:17
vfgce: 用來也沒比較簡潔.. 11/12 19:19
tony123930: 應該是說,這是python的用法問題。arr[:n]指的是回傳0 11/13 17:22
tony123930: ~n-1的array,你的範例就只是剛好選到一個,所以回傳a 11/13 17:22
tony123930: rr[0]以後再包成array 11/13 17:22