Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy,如何将二维数组转换为三维数组(通过将列分组为2列表)_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy,如何将二维数组转换为三维数组(通过将列分组为2列表)

Python Numpy,如何将二维数组转换为三维数组(通过将列分组为2列表),python,arrays,numpy,Python,Arrays,Numpy,例如 转换前 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]]]) 转换后 array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]]) a

例如

转换前

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]]])
转换后

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])分为两个列表(例如[0,0],[0])来实现。有任何numpy样式的快捷方式吗?

我想你可以做一些奇特的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是的,您是对的,第二个数组的dtype是object,它在我的程序中工作没有错误,但我也对它的dtype感到困惑。这个结构基本上就是我想要的,你真的需要这样的一个对象吗,或者有其他的解决方案吗?例如,看一看切片(假设
x
是您的数组):
x[:,0:2],x[:,2]
谢谢@WoLpH,实际上我不需要它作为对象。我只是打算这样处理它以备以后使用,现在我想我应该将它保留为2d数组,并在使用时对其进行切片