根据键重塑数组

2024-01-07

我不知道我想要做什么的确切技术术语,所以我将尝试用一个例子来演示:

我有两个长度相同的向量,a and b, 如下:

In [41]:a
Out[41]:
array([ 0.61689215,  0.31368813,  0.47680184, ...,  0.84857976,
    0.97026244,  0.89725481])

In [42]:b
Out[42]:
array([35, 36, 37, ..., 36, 37, 38])

a包含 N 个浮点数并且b包含 N 个元素:具有 10 个不同值的键:35、36、37、...、43、44

我希望得到一个新的矩阵M有 10 列,其中第一列包含中的所有行a其对应的键为b是 35。第二列M包含中的所有行a其对应的键为b是 36。等等,直到第 10 列M.

我希望这一点很清楚。谢谢


itertools.groupby可用于对值进行分组(排序后)。用于numpy arrays是可选的。

import numpy as np
import itertools
N=50
# a = np.random.rand(50)*100
a = np.random.randint(0,100,N) # int to make printing more compact
b = np.random.randint(35,45, N)

# make structured array to easily sort both arrays together
dtype = np.dtype([('a',float),('b',int)])
ab = np.ndarray(a.shape,dtype=dtype)
ab['a'] = a
ab['b'] = b
# ab = np.sort(ab,order=['b']) # sorts both 'b' and 'a'
I = np.argsort(b,kind='mergesort') # preserves order
ab = ab[I]

# now group, and extract lists of lists
gp = itertools.groupby(ab, lambda x: x['b'])
xx = [list(x[1]) for x in gp]
#print np.array([[y[0] for y in x] for x in xx]) # list of lists

def filled(x):
    M = max(len(z) for z in x)
    return np.array([z+[np.NaN]*(M-len(z)) for z in x])
print filled([[y[1] for y in x] for x in xx]).T
print filled([[y[0] for y in x] for x in xx]).T

生产:

[[ 35.  36.  37.  38.  39.  40.  41.  42.  43.  44.]
 [ 35.  36.  37.  38.  39.  40.  41.  42.  43.  44.]
 [ nan  36.  37.  nan  39.  40.  41.  42.  43.  44.]
 [ nan  36.  37.  nan  39.  40.  41.  42.  43.  44.]
 ...]

[[ 54.  69.  34.  28.  71.  53.  33.  19.  64.  56.]
 [ 90.  52.  11.   9.  50.  53.  25.  37.  69.  56.]
 [ nan  97.  31.  nan  69.  35.   2.  80.  91.  54.]
 [ nan  33.  87.  nan  47.  90.  81.  45.  86.  57.]
 ...]

我在用argsort with mergesort保持秩序a在子列表内。np.sort对两者进行词法排序b and a(与我的预期相反order范围)。

另一种方法是使用 Python 字典,也保留了顺序a。在大型数组上它可能会更慢,但它隐藏的细节更少:

import collections
d = collections.defaultdict(list)
for k,v in zip(b,a):
    d[k].append(v)
values = [d[k] for k in sorted(d.keys())]
print filled(values).T
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据键重塑数组 的相关文章

随机推荐

  • iptables 转发和输入

    我有一个装有 Linux 电脑的家庭网络 所有电脑都运行着 iptables 我认为将我的 LAN 放在 Linux 网关 防火墙后面更容易 所以我在我的路由器和 LAN 之间放置了一台电脑 带有 fedora 没有 gui 并配置了 ip
  • Amazon S3 预签名 URL

    如果我将我的应用程序设置为生成用于访问 S3 媒体的预签名 URL 以便我可以将文件设置为私有 除非通过登录用户访问 那么如果有人有权访问 那么我这样说是否正确到 URL 在到期时间内 他们可以看到该文件 尽管它是 私有 的 因此 如果有人
  • 重载运算符和链接

    我有一个类 其中包含存储动态二维数组的对象 矩阵 我正在尝试重载 运算符 以便将 1 个矩阵复制到另一个矩阵上 以下作品 Square Matrix a b c a b 但是 这不起作用 a b c 它给了我以下错误1 与operator
  • QUANTEDA - 无效类“dfmSparse”对象

    我收到此警告消息 我使用这些数据 https github com kbenoit quanteda tree master data data char inaugural RData https github com kbenoit q
  • OpenCV 和 CMake 的链接问题

    我正在编写一个使用OpenCV的程序 安装在本地目录中 因为我在那台机器上没有root权限 并且我已经编写了相应的CMakeLists txt文件 我的问题是编译在链接阶段以不同的方式失败 我花了三个小时尝试了网上提出的所有不同的解决方案
  • 如何获取随机 json 数据并附加到 div 元素

    说这是我的 json imageSmall images employee jpgs employees abhishek 80x80 jpg imageBig images employee jpgs employees abhishek
  • 玩 securesocial - 开发者环境和单元测试

    我们在 Play 2 应用程序中使用 securesocial 模块进行身份验证 我有两个关于这个模块的问题 首先 有没有一种简单的方法可以禁用开发环境中的授权检查 最好不注释所有内容 SecureSocial SecuredAction注
  • 使用 Python 下载共享的 Google Drive 文件夹

    我的谷歌驱动器上有一个文件夹 其中只有 jpg 图像 我想使用该文件夹的共享链接将该文件夹中的所有图像下载到我的计算机上 到目前为止 我发现唯一有效的是下面的代码 但我只能让它适用于特定的共享文件 而不是整个文件夹 from google
  • 使用 TabItem 时如何将 TabLayout 与 ViewPager 同步

    我想用TabLayout with TabItem与以下代码
  • NuGet 包文件在构建期间未复制到项目内容

    我正在使用 VS2012 professional 和 NuGet Package Manager 版本 2 2 31210 构建 MVC4 Web 应用程序 我的解决方案中有多个项目 所有项目都共享我使用 NuGet 安装的各种包 我的项
  • 基于组件的MVC框架和基于动作的MVC框架

    您好 我曾使用过 JSF 它是一个基于组件的 MVC 框架 我知道很多 Web 项目都使用 Spring 作为其技术 而 Spring 属于 基于操作的 UI 框架 类别 我想知道这里有什么区别 哪一种更先进并为用户提供更多灵活性 一些优点
  • C 线程之间的消息传递

    我试图让线程 A 与线程 B 进行通信 我应该使用线程之间的消息传递来执行此操作 但我试图找到一些解释消息传递的示例源代码 有谁有一些解释消息传递的示例源代码 C 语言 的良好链接吗 虽然没有链接 但有很多方法可以实现这一点 首先是使用套接
  • C++中接口的多重继承

    我有一个对象接口和派生对象可能想要支持的开放式接口集合 An object class IObject getAttribute 0 A mutable object class IMutable setAttribute 0 A lock
  • 树的深度(哈斯克尔)

    我试图弄清楚如何计算 Haskell 中一般树的深度 我可以找出简单二叉树的解决方案 但不能找出具有任意数量叶子的一般树 这是我的二叉树代码 depth of a binary tree depth Tree a gt Int depth
  • Bootstrap 4 导航栏切换图标不出现

    Visit https jsfiddle net 8tpm4z00 https jsfiddle net 8tpm4z00 div class container div
  • 如何使用 React Native Stack Navigation 处理锁定方向

    我有一个在 iOS 和 Android 上运行的 React Native Expo 应用程序 使用具有两个视图的堆栈导航 第一个视图锁定为纵向屏幕方向 export class HomeScreen extends Component c
  • 如何让 setup.py 测试使用特定的 Fortran 编译器?

    我正在尝试测试package https github com jsalvatier scikits bvp solver其中包括一些 f90 文件 如果我构建或安装并指定 fortran 编译器 它就可以正常工作 但是 当我尝试测试时 出
  • 如何在 Inno Setup 中的安装和卸载时使用带有依赖项的 DLL?

    我想在卸载应用程序时在 iss 中导入两个 dll 我找不到办法做到这一点 procedure Installed external Installed files StatisticInstallInfo dll adcore dll c
  • 使用 sed 或 grep 计算一行中的正则表达式模式匹配数?

    我想计算单行上的匹配数 或所有行 因为总是只有一行 我想不仅仅计算每行一场比赛 如 echo 123 123 123 grep c E 123 Result 1 更好的例子 echo 1 1 2 2 2 5 grep c E 1 1 Res
  • 根据键重塑数组

    我不知道我想要做什么的确切技术术语 所以我将尝试用一个例子来演示 我有两个长度相同的向量 a and b 如下 In 41 a Out 41 array 0 61689215 0 31368813 0 47680184 0 84857976