你可以做花哨numpy的索引我想:
>>> a=np.arange(12).reshape(4,3)
>>> a
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> b=np.array([a[:,0:2].tolist(),a[:,2:3].tolist()])
>>> b
array([[[0, 1], [3, 4], [6, 7], [9, 10]],
[[2], [5], [8], [11]]], dtype=object)
>>> b[0][0][0],b[0][0][1],b[1][0][0]
(0, 1, 2)
添加的.tolist()
將使a
副本。
或者,如果你想裏面b
的對象保持到a
參考或視圖:
>>> b=np.array([a[:,0:2],a[:,2:3]])
>>> b
array([[[0 1], [3 4], [6 7], [ 9 10]],
[[2], [5], [8], [11]]], dtype=object)
>>> b[0][0][0],b[0][0][1],b[1][0][0]
(0, 1, 2)
然後當a
確實b
將改變:
>>> a[0][0]=23
>>> a
array([[23, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> b
array([[[23 1], [3 4], [6 7], [ 9 10]],
[[2], [5], [8], [11]]], dtype=object)
>>> b[0][0].flags['OWNDATA']
False
注意你的第二個陣列不再'dtype = np.int',因爲你的列大小不均勻,它變成'dtype = object',是你想要的嗎? – jamylak
@jamylak是的,你是對的,第二類的dtype是對象,它在我的程序中沒有錯誤,但我也對它的dtype感到困惑。這個結構基本上是我想要的,雖然 – bayesrule
你是否真的需要它成爲這樣的對象還是可能的替代解決方案?例如,看看切片(假設'x'是你的數組):'x [:,0:2],x [:,2]' – Wolph