Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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/4/jsp/3.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结构化数组,其中每个元素本身就是一个numpy数组(dtype=';O';)_Python_Arrays_Numpy_Numpy Ndarray - Fatal编程技术网

Python 如何展平numpy结构化数组,其中每个元素本身就是一个numpy数组(dtype=';O';)

Python 如何展平numpy结构化数组,其中每个元素本身就是一个numpy数组(dtype=';O';),python,arrays,numpy,numpy-ndarray,Python,Arrays,Numpy,Numpy Ndarray,我有一个numpy结构化数组,其中数组中的每个元素本身就是一个numpy数组(dtype='O')。同一行中的每个元素数组始终具有相同的长度,而不同行中的元素数组可以具有可变的长度。例如,它可以如下所示: array([(array([1], dtype=int32), array([0.1], dtype=float64)), (array([2, 3, 4], dtype=int32), array([0.2, 0.3, 0.4], dtype=float64)),

我有一个numpy结构化数组,其中数组中的每个元素本身就是一个numpy数组(dtype='O')。同一行中的每个元素数组始终具有相同的长度,而不同行中的元素数组可以具有可变的长度。例如,它可以如下所示:

array([(array([1], dtype=int32),       array([0.1], dtype=float64)),
       (array([2, 3, 4], dtype=int32), array([0.2, 0.3, 0.4], dtype=float64)),
       (array([5, 6], dtype=int32),    array([0.5, 0.6], dtype=float64))],
      dtype=[('field_1', 'O'), ('field_2', 'O')])
将这样一个数组展平的最佳方法是什么,以便将元素数组长度为N的行扩展为N行?理想情况下,我希望展平的阵列看起来像:

array([(1, 0.1),
       (2, 0.2),
       (3, 0.3),
       (4, 0.4),
       (5, 0.5),
       (6, 0.6)],
      dtype=[('field_1', int32), ('field_2', float64)])
但我也可以处理其他格式,只要扩展长度大于1的行,例如:

array([(array([1], dtype=int32), array([0.1], dtype=float64)),
       (array([2], dtype=int32), array([0.2], dtype=float64)),
       (array([3], dtype=int32), array([0.3], dtype=float64)),
       (array([4], dtype=int32), array([0.4], dtype=float64)),
       (array([5], dtype=int32), array([0.5], dtype=float64)),
       (array([6], dtype=int32), array([0.6], dtype=float64))],
      dtype=[('field_1', 'O'), ('field_2', 'O')])
如果这更容易实现的话。

我不确定这是否是“最好”的方法,但它可以实现您想要的。我不知道有什么方法可以完全在内存中完成,而不需要拷贝,所以我会从一个空数组开始

>>>import numpy as np

>>>original = np.array([(np.array([1], dtype=np.int32), np.array([0.1], dtype=np.float64)),
...   (np.array([2], dtype=np.int32), np.array([0.2], dtype=np.float64)),
...   (np.array([3], dtype=np.int32), np.array([0.3], dtype=np.float64)),
...   (np.array([4], dtype=np.int32), np.array([0.4], dtype=np.float64)),
...   (np.array([5], dtype=np.int32), np.array([0.5], dtype=np.float64)),
...   (np.array([6], dtype=np.int32), np.array([0.6], dtype=np.float64))],
...   dtype=[('field_1', '<i4'), ('field_2', '<f8')])
>>>copy = np.empty((6,1), dtype=[('field_1', '<i4'), ('field_2', '<f8')])
>>将numpy作为np导入
>>>original=np.array([(np.array([1],dtype=np.int32),np.array([0.1],dtype=np.float64)),
…(np.array([2],dtype=np.int32),np.array([0.2],dtype=np.float64)),
…(np.array([3],dtype=np.int32),np.array([0.3],dtype=np.float64)),
…(np.array([4],dtype=np.int32),np.array([0.4],dtype=np.float64)),
…(np.array([5],dtype=np.int32),np.array([0.5],dtype=np.float64)),
…(np.array([6],dtype=np.int32),np.array([0.6],dtype=np.float64)),

…dtype=[('field_1','与上面类似,但使用list和zip

z
array([(array([1]), array([0.1])),
       (array([2, 3, 4]), array([0.2, 0.3, 0.4])),
       (array([5, 6]), array([0.5, 0.6]))],
      dtype=[('field_1', 'O'), ('field_2', 'O')])

x = np.concatenate(z['field_1'])
y = np.concatenate(z['field_2'])

dt = np.dtype([('f0', '<i4'), ('f1', 'f8')])
np.asarray(list(zip(x, y)), dtype=dt)

array([(1, 0.1), (2, 0.2), (3, 0.3), (4, 0.4), (5, 0.5), (6, 0.6)],
      dtype=[('f0', '<i4'), ('f1', '<f8')])
z
数组([(数组([1]),数组([0.1]),
(数组([2,3,4]),数组([0.2,0.3,0.4]),
(数组([5,6]),数组([0.5,0.6]),
数据类型=[('field_1','O'),('field_2','O'))
x=np.连接(z['field_1'])
y=np.连接(z['字段_2'])
dt=np.dtype([('f0','
>>>copy.flatten()
array([(1, 0.1), (2, 0.2), (3, 0.3), (4, 0.4), (5, 0.5), (6, 0.6)],
  dtype=[('field_1', '<i4'), ('field_2', '<f8')])
z
array([(array([1]), array([0.1])),
       (array([2, 3, 4]), array([0.2, 0.3, 0.4])),
       (array([5, 6]), array([0.5, 0.6]))],
      dtype=[('field_1', 'O'), ('field_2', 'O')])

x = np.concatenate(z['field_1'])
y = np.concatenate(z['field_2'])

dt = np.dtype([('f0', '<i4'), ('f1', 'f8')])
np.asarray(list(zip(x, y)), dtype=dt)

array([(1, 0.1), (2, 0.2), (3, 0.3), (4, 0.4), (5, 0.5), (6, 0.6)],
      dtype=[('f0', '<i4'), ('f1', '<f8')])