Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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数组_Python_Arrays_Numpy - Fatal编程技术网

Python 分割嵌套numpy数组

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

我有一个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 = 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))