Python 分割嵌套numpy数组
我有一个28 x 1875形状的numpy数组。每个元素都是一个3元素列表(仅浮动)。我需要将每个元素拆分为单个元素,以获得形状为28x5625(1875*3)的数组。我尝试了Python 分割嵌套numpy数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个28 x 1875形状的numpy数组。每个元素都是一个3元素列表(仅浮动)。我需要将每个元素拆分为单个元素,以获得形状为28x5625(1875*3)的数组。我尝试了np.split,但是它只分离每个元素,而不分离每个子元素。有没有快速的方法可以做到这一点?制作二维列表阵列: In [522]: arr = np.empty(6,object) In [523]: arr[:] = [list(range(i,i+3)) for i in range(6)] In [524]: arr
np.split
,但是它只分离每个元素,而不分离每个子元素。有没有快速的方法可以做到这一点?制作二维列表阵列:
In [522]: arr = np.empty(6,object)
In [523]: arr[:] = [list(range(i,i+3)) for i in range(6)]
In [524]: arr = arr.reshape(2,3)
In [525]: arr
Out[525]:
array([[list([0, 1, 2]), list([1, 2, 3]), list([2, 3, 4])],
[list([3, 4, 5]), list([4, 5, 6]), list([5, 6, 7])]], dtype=object)
如果是1d,填充这样一个数组会更容易,这就是为什么我从(6,)开始,然后再重塑
保罗·潘泽的建议:
In [526]: np.array(arr.tolist())
Out[526]:
array([[[0, 1, 2],
[1, 2, 3],
[2, 3, 4]],
[[3, 4, 5],
[4, 5, 6],
[5, 6, 7]]])
In [527]: _.reshape(2,-1)
Out[527]:
array([[0, 1, 2, 1, 2, 3, 2, 3, 4],
[3, 4, 5, 4, 5, 6, 5, 6, 7]])
您还可以使用np.stack
(一个版本的np.concatenate
)来创建nd数组。但它确实需要一个1d对象数组,因此ravel
:
In [536]: np.stack(arr.ravel())
Out[536]:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6],
[5, 6, 7]])
可根据需要对其进行重塑:
In [537]: np.stack(arr.ravel()).reshape(2,-1)
Out[537]:
array([[0, 1, 2, 1, 2, 3, 2, 3, 4],
[3, 4, 5, 4, 5, 6, 5, 6, 7]])
在某些情况下,我们需要对轴进行转置以获得所需的顺序。制作列表的二维数组:
In [522]: arr = np.empty(6,object)
In [523]: arr[:] = [list(range(i,i+3)) for i in range(6)]
In [524]: arr = arr.reshape(2,3)
In [525]: arr
Out[525]:
array([[list([0, 1, 2]), list([1, 2, 3]), list([2, 3, 4])],
[list([3, 4, 5]), list([4, 5, 6]), list([5, 6, 7])]], dtype=object)
如果是1d,填充这样一个数组会更容易,这就是为什么我从(6,)开始,然后再重塑
保罗·潘泽的建议:
In [526]: np.array(arr.tolist())
Out[526]:
array([[[0, 1, 2],
[1, 2, 3],
[2, 3, 4]],
[[3, 4, 5],
[4, 5, 6],
[5, 6, 7]]])
In [527]: _.reshape(2,-1)
Out[527]:
array([[0, 1, 2, 1, 2, 3, 2, 3, 4],
[3, 4, 5, 4, 5, 6, 5, 6, 7]])
您还可以使用np.stack
(一个版本的np.concatenate
)来创建nd数组。但它确实需要一个1d对象数组,因此ravel
:
In [536]: np.stack(arr.ravel())
Out[536]:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6],
[5, 6, 7]])
可根据需要对其进行重塑:
In [537]: np.stack(arr.ravel()).reshape(2,-1)
Out[537]:
array([[0, 1, 2, 1, 2, 3, 2, 3, 4],
[3, 4, 5, 4, 5, 6, 5, 6, 7]])
在某些情况下,我们需要对轴进行转置以获得所需的顺序。a如何?您是否检查了np。重塑?您的描述中存在歧义。图形(281875,3)是浮点型还是(281875)dtype对象?如果对象是元素
列表
,或数组
?如果是object,为什么是那样的,而不是3d?形状是(281875),但每个元素都是一个列表,它来自一个以这种方式返回数据的函数np。重塑可能无法直接工作,但如果您首先转换为list:np.reformate(arr.tolist(),(*arr.shape[:-1],-1))
a怎么样?您是否检查了np.重塑?您的描述有歧义。图形(281875,3)是浮点型还是(281875)dtype对象?如果对象是元素列表
,或数组
?如果是object,为什么是那样的,而不是3d?形状是(281875),但每个元素都是一个列表,它来自一个以这种方式返回数据的函数np。重塑
可能不会直接起作用,但如果您首先转换为list,它应该是:np.reformate(arr.tolist(),(*arr.shape[:-1],-1))