将 MxN 二维数据点数组重新组织为 N 维数组

2023-12-01

我在二维数组中进行了一系列测量,例如

T    mu1  mu2  mu3  a    b    c    d    e
0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  2.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  0.0  3.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  1.0  1.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  1.0  2.0  0.0  0.0  0.0  0.0  0.0
0.0  0.0  1.0  3.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  2.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  2.0  1.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  2.0  2.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  2.0  3.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  3.0  0.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  3.0  1.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  3.0  2.0  0.0  0.0  0.0  0.0  0.0
0.0  1.0  3.0  3.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  0.0  2.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  0.0  3.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  1.0  0.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  1.0  1.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  1.0  2.0  0.0  0.0  0.0  0.0  0.0
1.0  0.0  1.0  3.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  2.0  0.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  2.0  1.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  2.0  2.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  2.0  3.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  3.0  0.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  3.0  1.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  3.0  2.0  0.0  0.0  0.0  0.0  0.0
1.0  1.0  3.0  3.0  0.0  0.0  0.0  0.0  0.0

where T, mu1, mu2 and mu3是我控制的变量(自变量)的 4 个轴。a, b, c, d and e是我所做的测量(因变量)。

我想在 numpy 中将此 2D 数组转换为 5D 数组。通过指定T, mu1, mu2 and mu3(或至少它们的 4 个索引)我希望能够检索相应的a, b, c, d and e values.

有没有一种直接的方法可以通过指定轴对应的列来重塑这种数组?这MultiIndexin Pandas 似乎巧妙地将其组织在表格中,但似乎不适合高维数组。我不一定会提前知道 ndarray 的形状应该是什么,但在我看来,根据这些值应该可以正确地重塑数组。每个轴的增量值也可能不同,但它们始终是统一的。

我目前的想法是忽略mu1, mu2 and mu3列和堆叠组T数据到 3D 数组中。从那里我会堆叠 3D 组mu1将数据放入 4D 数组中,然后重复该过程mu2 and mu3。这似乎是一个乏味的过程,但应该有一个简单的解决方案。


首先,让我们制作一些假数据:

# an N x 5 array containing a regular mesh representing the stimulus params
stim_params = np.mgrid[:2, :3, :4, :5, :6].reshape(5, -1).T

# an N x 3 array representing the output values for each simulation run
output_vals = np.arange(720 * 3).reshape(720, 3)

# shuffle the rows for a bit of added realism
shuf = np.random.permutation(stim_params.shape[0])
stim_params = stim_params[shuf]
output_vals = output_vals[shuf]

现在你可以使用np.lexsort获取一组索引,该索引将对模拟参数的 2D 数组的行进行排序,以便每列中的值按升序排列。完成此操作后,您可以将这些索引应用于模拟输出值的行。

# get the number of unique values for each stimulus parameter
params_shape = tuple(np.unique(col).shape[0] for col in stim_params.T)

# get the set of row indices that will sort the stimulus parameters in ascending
# order, starting with the final column
idx = np.lexsort(stim_params[:, ::-1].T)

# sort and reshape the stimulus parameters:
sorted_params = stim_params[idx].T.reshape((5,) + params_shape)

# sort and reshape the output values
sorted_output = output_vals[idx].T.reshape((3,) + params_shape)

我发现最难的部分通常只是试图理解输出的所有不同维度对应的内容:

# array of stimulus parameters, with dimensions (n_params, p1, p2, p3, p4, p5)
print(sorted_params.shape)
# (5, 2, 3, 4, 5, 6)

# to check that the sorting worked as expected, we can look at the values of the 
# 5th parameter when all the others are held constant at 0:
print(sorted_params[4, 0, 0, 0, 0, :])
# [0 1 2 3 4 5]

# ... and the 1st parameter when we hold all the others constant:
print(sorted_params[0, :, 0, 0, 0, 0])
# [0, 1]

# ... now let the 1st and 2nd parameters covary:
print(sorted_params[:2, :, :, 0, 0, 0])
# [[[0 0 0]
#   [1 1 1]]

#  [[0 1 2]
#   [0 1 2]]]

希望你明白了。相同的索引逻辑适用于排序的模拟输出:

# array of outputs, with dimensions (n_outputs, p1, p2, p3, p4, p5)
print(sorted_output.shape)
# (3, 2, 3, 4, 5, 6)

# the first output variable whilst holding the first 4 simulation parameters
# constant at 0:
print(sorted_output[0, 0, 0, 0, 0, :])
# [ 0  3  6  9 12 15]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 MxN 二维数据点数组重新组织为 N 维数组 的相关文章

  • 测试交互式Python程序

    我想知道python的哪些测试工具支持交互式程序的测试 例如 我有一个由以下人员启动的应用程序 python dummy program py gt gt Hi whats your name Joseph 我想要仪器Joseph所以我可以
  • Pandas 在列级别连接数据帧时添加键

    根据 Pandas 0 19 2 文档 我可以提供keys参数来创建结果多索引 DataFrame 一个例子 来自 pandas 文档 是 result pd concat frames keys x y z 我将如何连接数据框以便我可以在
  • python blpapi安装错误

    我试图根据 README 中的说明为 python 安装 blpapi 3 5 5 但是在运行时 python setup py install 我收到以下错误 running install running build running b
  • Scrapy Splash,如何处理onclick?

    我正在尝试抓取以下内容 我能够收到响应 但我不知道如何访问以下项目的内部数据以抓取它 我注意到访问这些项目实际上是由 JavaScript 和分页处理的 这种情况我该怎么办 下面是我的代码 import scrapy from scrapy
  • 如何计算查询集中每个项目的两个字段的总和

    假设我有以下模型结构 class SomeModel Model base price DecimalField commision DecimalField 我不想存储total price在我的数据库中为了数据一致性并希望将其计算为ba
  • 从 Spark 数据帧中过滤大量 ID

    我有一个大型数据框 其格式类似于 ID Cat date 12 A 201602 14 B 201601 19 A 201608 12 F 201605 11 G 201603 我需要根据大约 500 万个 Is 的列表来过滤行 最直接的方
  • 如何使用 ipywidgets 创建动态依赖下拉菜单?

    我创建了一个带有两个下拉菜单的表单 我的目标是使一个下拉列表依赖于另一个下拉列表 这张图说明了我的目标和目前的情况 https i stack imgur com o9k5G png 下面的示例代码可以在 Google Colab 或 Ju
  • 监控培训课程如何运作?

    我试图理解使用之间的区别tf Session and tf train MonitoredTrainingSession 以及我可能更喜欢其中之一 似乎当我使用后者时 我可以避免许多 杂务 例如初始化变量 启动队列运行程序或设置文件编写器以
  • 如何在python mechanize中设置cookie

    向服务器发送请求后 br open http xxxx br select form nr 0 br form MESSAGE 1 2 3 4 5 br submit 我得到了响应标题 其中包含 set cookie Set Cookie
  • Python 在 64 位 vista 上获取 os.environ["ProgramFiles"] 的错误值

    Vista64 计算机上的 Python 2 4 3 环境中有以下2个变量 ProgramFiles C Program Files ProgramFiles x86 C Program Files x86 但是当我运行以下命令时 impo
  • Python 可选参数对

    我正在使用argparse模块获取两个可选的命令行参数 parser add argument start date nargs metavar START DATE help start date in YYYY MM DD parser
  • 使用 os.forkpty() 创建一个伪终端以 ssh 到远程服务器并与其通信

    我正在尝试编写一个 python 脚本 它可以 ssh 到远程服务器 并可以从 python 客户端执行 ls cd 等简单命令 但是 在成功 ssh 到服务器后 我无法读取伪终端的输出 任何人都可以在这里帮助我 以便我可以在服务器上执行一
  • 获取 python 模块的 2 个独立实例

    我正在与以非 OO 方式编写的 python 2 x API 进行交互 它使用模块全局范围来处理一些内部状态驱动的东西 在它不再是单例的情况下需要它 并且修改原始代码 不是我们的 不是一个选择 如果不使用单独解释器的子进程运行 有什么方法可
  • 列表中的“u”是什么意思?

    这是我第一次遇到这种情况 刚刚打印了一个列表 每个元素似乎都有一个u在它前面 即 u hello u hi u hey 它是什么意思 为什么列表的每个元素前面都会有这个 由于我不知道这种情况有多常见 如果您想了解我是如何遇到它的 我会很乐意
  • python:xml.etree.ElementTree,删除“命名空间”

    我喜欢 ElementTree 解析 xml 的方式 特别是 Xpath 功能 我有一个带有嵌套标签的应用程序的 xml 输出 我想按名称访问此标签而不指定名称空间 这可能吗 例如 root findall molpro job 代替 ro
  • 具有行业级约束的 SciPy 投资组合优化

    尝试在这里优化投资组合权重分配 通过限制风险来最大化我的回报函数 我可以毫无问题地通过简单的约束 所有权重之和等于 1 找到产生我的回报函数的优化权重 并做出另一个约束 即我的总风险低于目标风险 我的问题是 如何为每个组添加行业权重界限 我
  • scikit-learn kmeans 聚类的初始质心

    如果我已经有一个可以作为初始质心的 numpy 数组 我该如何正确初始化 kmeans 算法 我正在使用 scikit learn Kmeans 类 这个帖子 具有选定初始中心的 k 均值 https stackoverflow com q
  • gnuplot:第 1 行:无效命令

    stackoverflow 上可爱的人们大家好 我正在尝试使用 gnuplot 绘制数据 我首先阅读表格并提取我想要的数据 我将此数据写入 dat 文件 截至目前 我只是尝试通过命令行绘制它 但会添加必要的代码以在 python 脚本工作后
  • 如何从 python 中的字符串中删除 ANSI 转义序列

    这是包含我的字符串的片段 ls r n x1b 00m x1b 01 31mexamplefile zip x1b 00m r n x1b 01 31m 该字符串是从我执行的 SSH 命令返回的 我无法使用当前状态下的字符串 因为它包含 A
  • Pandas 2 个字段中唯一值的数量

    我正在尝试查找覆盖 2 个字段的唯一值的数量 例如 一个典型的例子是姓氏和名字 我有一个数据框 当我执行以下操作时 我只获取每列的唯一字段数 在本例中为 最后一个 和 第一个 不是复合体 df Last Name First Name nu

随机推荐

  • 停止函数写入标准输出

    我的代码中有这一行 writer cv CreateVideoWriter video avi cv CV FOURCC X V I D 30 480 800 1 哪些输出可以对此进行控制台 Output 0 avi to video av
  • 执行 cx_Freeze 结果时的循环依赖

    我面临着一个非常简单的重现问题 但我根本不明白发生了什么 我尝试编译一个Python脚本 它使用fastparquet依赖关系 与 cx Freeze 当我直接启动它时 我能够执行我的脚本python script py 但是如果我用 cx
  • C# MySQL 连接过多

    我试着跑SELECT在桌子上MySql我收到此错误 Server Error in MyApp Application Too many connections Description An unhandled exception occu
  • 逐字突出显示表格中的文本,而不是整个范围

    我想为 html 表创建过滤器 例如网站 ctrl f 但当前代码突出显示搜索输入单个单词时的所有范围 无需任何插件 就像下图一样 Html表格过滤 search keyup function console log this val if
  • 如何使用 FFMpeg -timestamp 语法

    Hi All ffMpeg timstamp 选项是否像上图一样工作 07 21 54 07 07 05 黑盒容器中的白色文本 在 ubuntu 12 04 中 像这样输入执行 ffmpeg y f video4linux2 s vga r
  • 在 Excel 中每 X 行插入行

    我有一长串代码 例如 008 45 等 需要多行文本来解释它们 我有代码列表 我想知道如何自动插入一行 例如第五行 下面的例子 1 2 3 4 5 6 7 8 9 10 100 每五行我想插入给定数量的我选择的行 我怎样才能做到这一点 谢谢
  • 如何将 Java 8 LocalDateTime 与 JPA 和 Hibernate 结合使用

    我有以下类描述片段 Column name invalidate token date Temporal TemporalType TIMESTAMP private LocalDateTime invalidateTokenDate 此代
  • 使用 PHP 脚本运行 shell 命令

    我正在使用 CodeIgniter 创建应用程序 但无法使用 PHP 脚本运行 Linux 命令 如何运行终端命令 我试过了shell exec and exec 但是在使用 CI 时两者都不起作用 这取决于您的服务器配置 如果这些功能被禁
  • QMainWindow 在 show() 之后立即关闭

    我是 Qt 新手 主要使用 Objective C 所以我遇到了可能是新手问题 来自QDialog我尝试打开的窗口QMainWindow像这样 this gt close SQLWindow window window receivePat
  • 使用 python requests 模块在单个请求中上传多个文件

    蟒蛇请求模块提供了有关如何在单个请求中上传单个文件的良好文档 files file open report xls rb 我尝试使用此代码来扩展该示例 以尝试上传多个文件 files file open report xls rb open
  • 如何使用 CAPI 的 CryptImportKey 和来自 OpenSSL 的 PEM 编码公钥?

    如何获取 Microsoft 的 CryptoAPICryptImportKey函数导入一个PEM编码密钥 它确实有效 但是CryptDecrypt返回错误 1 Generate a Public Private RSA key pair
  • 使用 CSS 从中间展开 div,而不是仅从顶部和左侧展开

    我不确定这是否可行 但我认为使用 CSS 转换来创建 div 从其中心扩展到预定高度和宽度 而不仅仅是从左上角 的效果会很酷 例如 如果我有 demo div div 和 为简洁起见 省略了供应商前缀 square width 10px h
  • VS2015 尝试运行应用程序时出错:无效指针

    当您调试 Visual Studio 2015 解决方案时 您会看到以下错误消息 尝试运行应用程序时出错 指针无效 显然有些东西配置不正确 或者与权限相关 只是想知道是否有人已经找出原因 根据杰里米的建议 我查看了活动日志 有关活动日志的信
  • 将数据库从资产复制到数据库文件夹[重复]

    这个问题在这里已经有答案了 在主要活动中 我有一个方法可以从assets to the databases文件夹 try CHECK IS EXISTS OR NOT SQLiteDatabase dbe SQLiteDatabase op
  • 使用 ComboBox 将 DataGridView 绑定到 DataTable 不起作用

    我正在尝试创建一个绑定到 DataTable 的 DataGridView 其中一列是 ComboBox 代码运行 但在绑定后 不是在绑定数据时 出现以下错误 System ArgumentException DataGridViewCom
  • 如何在 OData C# 驱动程序中支持嵌套开放复杂类型?

    我在 NET Web Api 项目中使用以下 C OData 包 安装包 Microsoft AspNet OData安装包 Microsoft AspNet WebApi OData 当遵循微软的例子时在 OData v4 中使用开放类型
  • ASPX 中的动态页面呈现

    我对 C 和 NET 非常陌生 我发现自己面临着一个问题 并且不确定我需要朝哪个方向前进 我的公司与第三方订阅履行系统合作以实现许多功能 包括计费和续订 该系统能够在触发某些事件时自动发送电子邮件 例如 每个订阅都会经历我们所说的续订系列
  • 无法在钛中运行应用程序

    我是新手Titanium 我已经安装了Titanium on my windows基于笔记本电脑 还进口的Kitchen Sink在工作室中应用它 我已经设置了所有path变量也是最新的Android SDK 我还更改了运行配置日志等 但是
  • 查找数组的子键中存在的键?

    如何检查数组的子键中是否存在某个键 如果找到该项目的密钥 然后返回该项目 例如 我有这个数组 Array 0 gt Array a gt Array quantity request gt 1 time created gt 1339688
  • 将 MxN 二维数据点数组重新组织为 N 维数组

    我在二维数组中进行了一系列测量 例如 T mu1 mu2 mu3 a b c d e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0