用列表重新排列:如何引用列表中的第一个元素
recarray with lists: how to reference first element in list
我想将记录数组中的几个字段的内容复制到一个 ndarray(均为 float64 类型)中。
当 recarray 数据在每个字段中只有一个值时,我知道如何执行此操作:
my_ndarray[:,0]=my_recarray['X'] #(for field 'X')
现在我有一个 recarray,每个字段都有 5 个浮点数的列表,我只想
复制每个列表的第一个元素。
当我将上面的内容与新的 recarray(和列表)一起使用时,出现此错误:
ValueError: could not broadcast input array from shape (92,5) into shape (92)
这完全有道理(事后看来)。
我以为我可以用这个得到每个元素的第一个元素:
my_ndarray[:,0]=my_recarray['X'][0] #(for field 'X')
我收到这个错误:
ValueError: could not broadcast input array from shape (5) into shape (92)
我有点明白...numpy 只获取第一行(5 个元素)并尝试广播到 92 个元素的列中。
所以....现在我想知道如何在 92 元素列中获取每个列表的第一个元素,
挠我的头....
在此先感谢您的建议。
我的猜测是 recarray
有一个 dtype
其中一个字段的形状为 5:
In [48]: dt = np.dtype([('X',int,5),('Y',float)])
In [49]: arr = np.zeros(3, dtype=dt)
In [50]: arr
Out[50]:
array([([0, 0, 0, 0, 0], 0.), ([0, 0, 0, 0, 0], 0.),
([0, 0, 0, 0, 0], 0.)], dtype=[('X', '<i8', (5,)), ('Y', '<f8')])
按名称访问此字段会生成一个 (3,5) 形状的数组(类似于您的 (92,5):
In [51]: arr['X']
Out[51]:
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
这可以描述为每条记录包含 5 个项目的列表,但是使用字段名称进行索引会生成一个二维数组,它可以像任何二维 numpy 数组一样进行索引。
让我们将这些值设置为一些有趣的值:
In [52]: arr['X'] = np.arange(15).reshape(3,5)
In [53]: arr
Out[53]:
array([([ 0, 1, 2, 3, 4], 0.), ([ 5, 6, 7, 8, 9], 0.),
([10, 11, 12, 13, 14], 0.)],
dtype=[('X', '<i8', (5,)), ('Y', '<f8')])
我们可以通过以下方式获取该字段的第一列:
In [54]: arr['X'][:,0]
Out[54]: array([ 0, 5, 10])
如果您有多个具有这种结构的字段,您可能必须按名称访问每个字段。多字段索引的功能有限。
我想将记录数组中的几个字段的内容复制到一个 ndarray(均为 float64 类型)中。 当 recarray 数据在每个字段中只有一个值时,我知道如何执行此操作:
my_ndarray[:,0]=my_recarray['X'] #(for field 'X')
现在我有一个 recarray,每个字段都有 5 个浮点数的列表,我只想 复制每个列表的第一个元素。 当我将上面的内容与新的 recarray(和列表)一起使用时,出现此错误:
ValueError: could not broadcast input array from shape (92,5) into shape (92)
这完全有道理(事后看来)。
我以为我可以用这个得到每个元素的第一个元素:
my_ndarray[:,0]=my_recarray['X'][0] #(for field 'X')
我收到这个错误:
ValueError: could not broadcast input array from shape (5) into shape (92)
我有点明白...numpy 只获取第一行(5 个元素)并尝试广播到 92 个元素的列中。
所以....现在我想知道如何在 92 元素列中获取每个列表的第一个元素, 挠我的头.... 在此先感谢您的建议。
我的猜测是 recarray
有一个 dtype
其中一个字段的形状为 5:
In [48]: dt = np.dtype([('X',int,5),('Y',float)])
In [49]: arr = np.zeros(3, dtype=dt)
In [50]: arr
Out[50]:
array([([0, 0, 0, 0, 0], 0.), ([0, 0, 0, 0, 0], 0.),
([0, 0, 0, 0, 0], 0.)], dtype=[('X', '<i8', (5,)), ('Y', '<f8')])
按名称访问此字段会生成一个 (3,5) 形状的数组(类似于您的 (92,5):
In [51]: arr['X']
Out[51]:
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
这可以描述为每条记录包含 5 个项目的列表,但是使用字段名称进行索引会生成一个二维数组,它可以像任何二维 numpy 数组一样进行索引。
让我们将这些值设置为一些有趣的值:
In [52]: arr['X'] = np.arange(15).reshape(3,5)
In [53]: arr
Out[53]:
array([([ 0, 1, 2, 3, 4], 0.), ([ 5, 6, 7, 8, 9], 0.),
([10, 11, 12, 13, 14], 0.)],
dtype=[('X', '<i8', (5,)), ('Y', '<f8')])
我们可以通过以下方式获取该字段的第一列:
In [54]: arr['X'][:,0]
Out[54]: array([ 0, 5, 10])
如果您有多个具有这种结构的字段,您可能必须按名称访问每个字段。多字段索引的功能有限。