使用 cellfun 将带参数的函数应用到单元格

2023-12-07

假设有一个字符元胞数组,希望将其转换为数字向量。这可以通过使用来完成str2num or str2double。例如,

x={'0.17106'; '2.11462'; '4.13938'; '6.24203'}
cellfun(@str2num,x)
str2double(x)

与以下功能相比,这些功能有点慢sscanf。然而,sscanf需要额外的参数,其规范似乎无法使用普通的cellfun语法,例如

cellfun(sscanf(>variable usually goes here<,'%f'),x)

一、如何申请sscanf对于元胞数组的每个元素,或者更一般地说,如何使用需要有序系列参数的任何函数cellfun?


要快速完成此操作,请不要使用cellfun or str2double。一些可能性:

strjoin with sscanf

Use strjoin组合元胞数组中的字符串x成一个以空格分隔的长字符串,然后可以使用以下命令非常快速地对其进行解析sscanf:

sscanf(strjoin(reshape(x,1,[])),'%f')

请注意reshape包含在内是为了保证元胞数组是一行,按照以下要求strjoin。一个简单的排列(.')如果你知道的话可以使用x是一列,或者什么也没有,如果x已经是一排了。

vertcat (or str2mat) with sscanf

代替strjoin,形成虚逗号分隔的列表的字符串与x{:}并将它们垂直连接起来vertcat(如果每个字符串具有相同数量的字符)。转置这个二维字符数组并sscanf可以再次快速解析它:

sscanf(vertcat(x{:})','%f');

或者,如果每个字符串的字符数不同,您可以使用str2mat,它创建一个空格填充的二维字符数组sscanf还高兴地读到:

sscanf(str2mat(x)','%f');

test

创建一个包含 10,000 个随机数的字符串表示形式的元胞数组:

>> x = sprintfc('%f',rand(1e4,1));

注意未记录的使用sprintfc打印到单元格。

参考方法:

>> tic; d0 = str2double(x); toc
Elapsed time is 0.302148 seconds.
>> tic; d1 = cellfun(@(x) sscanf(x,'%f'),x); toc
Elapsed time is 0.277386 seconds.
>> isequal(d0,d1)
ans =
     1

strjoin and vertcat:

>> tic; d2 = sscanf(strjoin(reshape(x,1,[])),'%f'); toc
Elapsed time is 0.068129 seconds.
>> isequal(d0,d2)
ans =
     1
>> tic; d3 = sscanf(vertcat(x{:}).','%f'); toc
Elapsed time is 0.024312 seconds.
>> isequal(d0,d3)
ans =
     1
>> tic; d4 = sscanf(str2mat(x).','%f'); toc
Elapsed time is 0.011917 seconds.
>> isequal(d0,d4)
ans =
     1

注意:这些数字是大概数字,因为应该在脚本或函数内多次迭代运行,但所有代码都已预热。尝试一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 cellfun 将带参数的函数应用到单元格 的相关文章

  • 在 MATLAB 中分析 wav 文件

    所以我有这个钢琴录音 wav 格式 我能够做一个FFT整体记录并识别频率 然而 根据我读过的一些文章 最好将 wav 文件分解为多个窗口 其中每个窗口都包含一个特定的音符 为此 我需要首先绘制时域信号的 功率包络 考虑音符平均能量概念 因此
  • 计算向量中连续 1 和 0 的数量

    在 Matlab 中我有一个如下所示的向量 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 我现在要做的是统计这个向量中1的个数 连续的 1 算作 1 此外 我还想计算 1 之间 0 的平均值和中
  • 如何将 Simulink 编码器编译器版本设置为支持 C++11 的版本?

    我正在尝试将代码合并到 Simulink 及其嵌入式编码器中 该代码使用 C 11 扩展 跑步mex setup c 给出这个输出 mex setup c MEX configured to use Xcode Clang for C la
  • 读取 MEX 文件中的 4D 数组

    我在 MATLAB 中有一个 4 维数组 我正在尝试访问 MEX 函数中的数组 下面创建 testmatrix 一个 4 维矩阵 已知数据为uint8 type Create a 4D array 2x 2y rgb 3 framenumb
  • 如何在matlab中显示图像上的点?

    我有一些像素点 比如 p1 1 1 和 p2 1 10 等等 我想以任何颜色在图像上显示这些点 这个怎么做 MATLAB plot http www mathworks com help techdoc ref plot html文档非常全
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 如何在 R 中导入 matlab 表

    我有一个matlab mat文件与表数据类型我想将其导入 R 中 我为此使用 readMat R 正在将其作为列表读取 之后有没有办法将列表转换为 R 中的数据帧或表格格式 当我使用as dataframe我收到以下错误 Error in
  • 在 MATLAB 中高效地形成动态窗口

    有人可以帮助我提供一种有效的方法 或者帮助我执行提供的代码 以尽可能少的步骤获得相同的结果 我将感激你 我有一个原始数组 A 1 1 1 4 3 4 5 4 4 3 3 1 0 0 2 6 2 6 3 6 6 2 7 4 8 7 2 2 2
  • 比较元胞数组中的字符串

    我试图在单词列表中找到最常见的单词 到目前为止 这是我的代码 uniWords unique lower words for i 1 length words for j 1 length uniWords if uniWords j lo
  • 与超类和子类构造函数接口

    我在 matlab 文档和之前有关使用 matlab 继承和类构造函数创建接口的问题中找不到帮助 为了使其整洁 放在一个包内 我可以将其压缩如下 而不是拖拽代码 一套 MyPkg有一个超类Super和一些子类Sub1 Sub2 我的大多数属
  • 是否有一个函数可以将两个元胞数组“压缩”在一起? [复制]

    这个问题在这里已经有答案了 假设我有一个元胞数组A and B as so A A B C D B 1 2 3 4 我想创建元胞数组C通过将 A 和 B 压缩 在一起 如下所示 C zip A B C A 1 B 2 C 3 D 4 这样的
  • 使用 varargin (...) 时如何显示不同的函数用法?

    当您输入 Matlab 函数名称并打开大括号时 例如sum 在命令窗口中 将打开一个工具提示 显示此函数的所有可能用法 当我编写自己的接受函数时varargin 工具提示仅显示一个选项 而不是varargin puts e g myfunc
  • MATLAB 在 MATLAB 7.10.0 学生版中似乎找不到 csaps()

    我有一些代码使用csaps Matlab的三次平滑样条拟合函数 http www mathworks com help toolbox curvefit csaps html我想将其提供给使用 MATLAB 7 10 0 R2010a 的学
  • 如何将Matlab代码库与Android集成?

    我有一个算法和 MATLAB 中的一些其他代码 我想在我的 Android 应用程序中使用它 我怎样才能做到这一点 我可以从 MATLAB 制作 jar 文件以便与 Android 一起使用吗 我必须做点别的事吗 如果您还有其他产品 适用于
  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2

随机推荐

  • OSError:安装 h2o 时版本不匹配?

    我是 H2o 新手 总部设在文档我为 python 安装了 H2o pip install h2o Then In import h2o h2o init Out OSError Traceback most recent call las
  • 如何将无符号整数加载到 SIMD 中

    我有一个 C 程序 其中有一些无符号整数数组 我正在使用这个声明uint32 t 我想使用 SIMD 对每个数组中存储的数据执行一些操作 这就是我陷入困境的地方 因为看起来大多数 SSE 和 SSE2 函数只支持 float 和 doubl
  • 如何从动态范围中分割文本?

    我从 ERP 系统下载了一个很长的数据集 他们是管子 划定的 我必须将其拆分为单独的列 我可以用FILTERXML or TEXTSPLIT 将它们拆分为列 我试图动态使用 Textsplit 函数 以便如果有任何新数据到达末尾行 它会自动
  • Swift 的 Guard 关键字

    Swift 2 引入了guard关键字 可用于确保各种数据已配置就绪 我看到的一个例子这个网站演示了一个submitTapped函数 func submitTapped guard username text characters coun
  • javascript for循环更改原始列表变量

    我有一个名为响应的对象集合 我正在创建另一个名为的变量object这是一个空对象并创建object array并将其设置为响应变量 我想我正在创建一个新的范围 但是 如果我在里面设置年龄object array作为空 这将我的响应数组中的年
  • 确定设备是智能手机还是平板电脑? [复制]

    这个问题在这里已经有答案了 我想获取有关设备的信息 看看它是智能手机还是平板电脑 我该怎么做 我想根据设备类型显示资源中的不同网页 String s Debug infos s n OS Version System getProperty
  • Home 键转到 Visual Studio Code 中的行首吗?

    Visual Studio Code 中使 Home 键转到行首的选项在哪里 现在你必须做 Home Home or Home Ctrl Left Arrow 我希望 home 位于该行的开头 奖金闲聊 文件 首选项 键盘快捷键 奖励阅读
  • 为什么如果 EOF 是行中的第一个字符,就会被识别?

    我写了这个C程序 include
  • 如何向每个 Angular.js $http 请求添加添加请求参数(例如启动 xdebug 会话)

    我的混合应用程序基于 AngularJS 并使用 php REST api 我想直接从我的 Angular 应用程序调试 php api 而不是使用 REST 控制台或 Postman 它将节省大量时间 特别是对于 POST 和 PUT 请
  • Sed 正则表达式更改文件

    我 未成功 尝试替换 Magento local xml 文件 连接字符串文件 中的数据库主机条目 该行如下
  • Python搜索目录,列出文件的基本名称,没有扩展名

    我想知道我是否可以修改我的代码以仅发布文件的基本名称 而不是包括扩展名的整个文件 我是 python 新手 所以我不太了解 而且我不知道不想修改某些东西并使其完全损坏 import glob import os os chdir C hea
  • 进程运行时不断打印子进程输出

    要从 Python 脚本启动程序 我使用以下方法 def execute command process subprocess Popen command shell True stdout subprocess PIPE stderr s
  • 在 Python 中将 SQLite 3 数据存储为变量

    我是否可以获取存储在 sqlite3 表中的数据并将其用作 Python 变量 我正在寻找可能类似于此伪代码的内容 import sqlite3 conn sqlite3 connect DATABASE cursor conn curso
  • 替换 pandas dataframe 列中的特定值,否则将列转换为数字

    给定以下 pandas 数据框 AgeAt X AgeAt Y AgeAt Z 0 Older than 100 Olde
  • React-router v6 私有路由不能正常工作

    我想用react router V6实现私有和公共路由 我已经尝试了StackOverflow上所有可用的解决方案 它似乎不起作用 这就是为什么我需要澄清 App tsx
  • 在汇编中实现正则表达式“[ab][^r]+r]”的匹配器

    我的汇编代码需要帮助 我需要使用编写代码来找到适合我的正则表达式的范围 我的正则表达式 ab r r 所以首先我寻找是否有 a 或 b 并跳转到 开始 部分 现在我有一个问题如何仅保存这封信的第一次出现 程序应显示 5 10 这意味着 匹配
  • 谷歌是否正在为本地主机生成新的 openid 声明标识符?

    我遇到了 google openid 标识符的问题 我在简单的 asp net mvc 项目中使用 dotnetopenauth 库 dotnetopenid 的后继者 在本地主机上的测试期间 我注意到谷歌有时会生成新的声明标识符 这是为什
  • 非阻塞同步 AJAX

    有没有办法执行同步 AJAX 查询而不冻结浏览器 在我看来 在大多数情况下 同步请求更容易使用 但它们阻止代码其他部分执行的事实才是真正的杀手 有没有一种方法可以实现同步 AJAX 而不会带来负面影响 是的 我意识到术语 同步 AJAX 是
  • 分享锚链接

    我想制作一个以这种形式共享链接的按钮 http example com anchor 但当我点击它时 它只共享 http example com 我怎样才能让它分享我想要的东西 这很简单 您想要共享的 URL 字符串应如下所示 http w
  • 使用 cellfun 将带参数的函数应用到单元格

    假设有一个字符元胞数组 希望将其转换为数字向量 这可以通过使用来完成str2num or str2double 例如 x 0 17106 2 11462 4 13938 6 24203 cellfun str2num x str2doubl