Numpy 重新排列列表:如何引用列表中的第一个元素

Numpy 重新排列列表:如何引用列表中的第一个元素,numpy,recarray,Numpy,Recarray,我想将记录数组中几个字段的内容复制到ndarray中(都是float64类型)。 当重新排列数据在每个字段中都有一个值时,我知道如何执行此操作: my_ndarray[:,0]=my_recarray['X'] #(for field 'X') 现在我有了一个在每个字段中有5个浮动列表的重新排列,我只想 复制每个列表的第一个元素。 当我将上述内容与新的重新排列(和列表)一起使用时,会出现以下错误: ValueError: could not broadcast input array fro

我想将记录数组中几个字段的内容复制到ndarray中(都是float64类型)。 当重新排列数据在每个字段中都有一个值时,我知道如何执行此操作:

my_ndarray[:,0]=my_recarray['X']  #(for field 'X')
现在我有了一个在每个字段中有5个浮动列表的重新排列,我只想 复制每个列表的第一个元素。 当我将上述内容与新的重新排列(和列表)一起使用时,会出现以下错误:

ValueError: could not broadcast input array from shape (92,5) into shape (92)
ValueError: could not broadcast input array from shape (5) into shape (92)
这完全有道理(事后看来)

我想我可以通过以下方法获得每个元素的第一个元素:

my_ndarray[:,0]=my_recarray['X'][0]  #(for field 'X')
我得到这个错误:

ValueError: could not broadcast input array from shape (92,5) into shape (92)
ValueError: could not broadcast input array from shape (5) into shape (92)
我有点理解…numpy只取第一行(5个元素)并尝试广播到92个元素的列中

所以…现在我想知道如何从92元素列中得到每个列表的第一个元素, 在我的脑海里搔痒。。。。
提前感谢您的建议。

我猜
重新排列
有一个
数据类型
,其中一个字段具有形状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')])
这可以描述为每个记录有5个项目的列表,但使用字段名进行索引会生成一个2d数组,它可以像任何2d 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')])

如果有多个字段具有这样的结构,则可能必须按名称访问每个字段。使用多字段索引的操作是有限的。

我的猜测是,
重新排列
有一个
数据类型
,其中一个字段的形状为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')])
这可以描述为每个记录有5个项目的列表,但使用字段名进行索引会生成一个2d数组,它可以像任何2d 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')])

如果有多个字段具有这样的结构,则可能必须按名称访问每个字段。使用多字段索引的功能是有限的。

我不使用recarray,真的,但是。。。你试过我的数组吗?只是想了想谢谢,但那不行。我添加了两个打印语句进行嗅探:
print(应力数组[0]['XR'][0])获取第一行,第一个列表元素print(应力数组[0]['XR'][1])获取第一行,第二个列表元素print(应力数组[1]['XR'][0])获取第二行,第一个列表元素print(应力数组[1]['XR'[1])获取第二行,第二个列表元素
等等……给我们一个小例子,这样我们就可以确定我们使用的是与您相同的数组。答案很可能包括工作演示代码。省去了编写演示示例的麻烦。我从一个上游进程继承了这个数据集。这是一个复杂的重新安排。我将看看是否可以创建一个简单的示例来演示行为。在此期间,我想出了一个蛮力循环来完成这项工作:
用于范围内的r\u cnt(应力数组.shape[0]):resvec\u数组[r\u cnt,0]=应力数组[r\u cnt][XR'][0]
,因此,我有了一个解决方案。不确定这是否是“最佳解决方案”,但我可以继续前进。不幸的是,我必须对12个字段执行此操作。LOLI不跟recarray合作,真的,但是。。。你试过我的数组吗?只是想了想谢谢,但那不行。我添加了两个打印语句进行嗅探:
print(应力数组[0]['XR'][0])获取第一行,第一个列表元素print(应力数组[0]['XR'][1])获取第一行,第二个列表元素print(应力数组[1]['XR'][0])获取第二行,第一个列表元素print(应力数组[1]['XR'[1])获取第二行,第二个列表元素
等等……给我们一个小例子,这样我们就可以确定我们使用的是与您相同的数组。答案很可能包括工作演示代码。省去了编写演示示例的麻烦。我从一个上游进程继承了这个数据集。这是一个复杂的重新安排。我将看看是否可以创建一个简单的示例来演示行为。在此期间,我想出了一个蛮力循环来完成这项工作:
用于范围内的r\u cnt(应力数组.shape[0]):resvec\u数组[r\u cnt,0]=应力数组[r\u cnt][XR'][0]
,因此,我有了一个解决方案。不确定这是否是“最佳解决方案”,但我可以继续前进。不幸的是,我必须对12个字段执行此操作。好极了!!您完全正确(事实上,至少有12个字段的数据类型为shape 5)。我的初始测试工作正常。谢谢,谢谢。显然,我对这方面还不熟悉。人们是如何在他们的帖子中使用in[###]:和Out[##]获得漂亮的代码格式的:
in/Out
编号是由
ipython
生成的。这是一个非常好的交互式Python环境。非常好!!您完全正确(事实上,至少有12个字段的数据类型为shape 5)。我的初始测试工作正常。谢谢,谢谢。显然,我对这方面还不熟悉。人们是如何在他们的帖子中使用in[###]:和Out[##]获得漂亮的代码格式的:
in/Out
编号是由
ipython
生成的。这是一个非常好的交互式Python环境。