E.g。
转换前
array([[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 0]])
转换后
array([[[0, 0], [0]],
[[0, 1], [1]],
[[1, 0], [1]],
[[1, 1], [0]]])
我通过循环行并将每一行(例如[0,0,0])切成2个列表(例如[[0,0,[0]])来实现。任何numpy风格的快捷方式?
答案 0 :(得分:1)
我想你可以做一些花哨的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)
然后b
会在a
执行时发生变化:
>>> 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