python数组堆叠_python-如何将numpy记录的数组堆叠起来?

[此帖子的早期版本标题不正确:“如何在一列numpy记录中添加一列?”早先的标题中提出的问题已经部分为answered,但此答案并不完全是该帖子的早先版本所要求的内容.我重新命名了标题,并对其进行了实质性的编辑,以使区别更加清晰.我还解释了为什么我前面提到的答案不符合我的期望.]

假设我有两个numpy数组x和y,每个数组由r个“记录”(又名“结构化”)数组组成.设x的形状为(r,cx),y的形状为(r,cy).我们还假设x.dtype.names和y.dtype.names之间没有重叠.

例如,对于r = 2,cx = 2,cy = 1:

import numpy as np

x = np.array(zip((1, 2), (3., 4.)), dtype=[('i', 'i4'), ('f', 'f4')])

y = np.array(zip(('a', 'b')), dtype=[('s', 'a10')])

我想“水平”连接x和y以产生具有形状(r,cx cy)的记录z的新数组.此操作完全不应修改x或y.

通常,z = np.hstack((x,y))不会,因为x和y中的dtype不一定匹配.例如,继续上面的示例:

z = np.hstack((x, y))

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

----> 1 z = np.hstack((x, y))

TypeError: invalid type promotion

现在,有一个函数numpy.lib.recfunctions.append_fields,看起来它可能会执行与我正在寻找的功能接近的操作,但是我无法从中得到任何帮助:我尝试过的所有操作要么由于错误而失败,要么产生除我尝试获取的以外的内容.

有人可以请我明确显示代码(使用nlrappend_fields或else1),该代码将从上例中定义的x和y生成一个新的记录数组z,等效于x和y的水平串联,并执行所以不修改x或y?

我假设这仅需要一两行代码.当然,我正在寻找不需要构建z的代码,通过遍历x和y可以逐条记录.同样,代码可以假定x和y具有相同的记录数,并且x.dtype.names和y.dtype.names之间没有重叠.除此之外,我正在寻找的代码应该对x和y一无所知.理想情况下,也应该对要连接的数组的数量不了解. IOW,不进行错误检查,我正在寻找的代码可能是函数hstack_rec的主体,以便新数组z将成为结果hstack_rec((x,y)).

1 …虽然我不得不承认,在迄今为止用numpy.lib.recfunctions.append_fields完美记录失败之后,我对如何使用此功能(无论其相关性)感到有点好奇这个帖子的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值