structfun
对标量结构体的每个字段应用函数
说明
应用 A
= structfun(func
,S
,Name,Value
)func
并使用一个或多个 Name,Value
对组参量指定其他选项。例如,要以结构体形式返回输出值,请指定 'UniformOutput',false
。当 func
返回的值不能合并为数组时,可以按结构体形式返回 A
。返回的结构体具有与 S
相同的字段。
当 func
返回 m
个输出值时,[A1,...,Am] = structfun(___)
返回多个输出数组 A1,...,Am
。func
可以返回不同数据类型的输出参量,但每次调用 func
时返回的每个输出的数据类型必须相同。您可将此语法与上述语法中的任何输入参量一起使用。
示例
将函数应用于结构体的字段
创建一个标量结构体,其字段中包含不同大小的数值数组。
S.f1 = 1:10; S.f2 = [2; 4; 6]; S.f3 = []
S = struct with fields:
f1: [1 2 3 4 5 6 7 8 9 10]
f2: [3x1 double]
f3: []
计算每个数值数组的均值,然后以数组的形式返回这些均值。
A = structfun(@mean,S)
A = 3×1
5.5000
4.0000
NaN
返回对象数组
创建一个标量结构体,其中的每个字段包含一个由随机数组成的数组。
S.X = rand(1,10); S.Y = rand(1,10); S.Z = rand(1,10)
S = struct with fields:
X: [0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649]
Y: [0.1576 0.9706 0.9572 0.4854 0.8003 0.1419 0.4218 0.9157 0.7922 0.9595]
Z: [0.6557 0.0357 0.8491 0.9340 0.6787 0.7577 0.7431 0.3922 0.6555 0.1712]
绘制数组。从 plot
函数返回图形线条对象数组,并使用这些对象为每一组数据点添加不同的标记。structfun
可以返回任何数据类型的数组,只要该数据类型的对象可以串联即可。
figure hold on p = structfun(@plot,S); p(1).Marker = 'o'; p(2).Marker = '+'; p(3).Marker = 's'; hold off
返回标量结构体
创建一个标量结构体,其字段中包含矩阵。
S.f1 = 1:10; S.f2 = [2 3; 4 5; 6 7]; S.f3 = rand(4,4)
S = struct with fields:
f1: [1 2 3 4 5 6 7 8 9 10]
f2: [3x2 double]
f3: [4x4 double]
计算每个矩阵的均值。mean
返回包含每列均值的向量,因此不能以数组的形式返回均值。要以结构体形式返回均值,请指定 'UniformOutput',false
名称-值对组。
A = structfun(@mean,S,'UniformOutput',false)
A = struct with fields:
f1: 5.5000
f2: [4 5]
f3: [0.6902 0.3888 0.7627 0.5962]
返回多个输出数组
创建一个标量结构体。
S.f1 = 1:10; S.f2 = [2 3; 4 5; 6 7]; S.f3 = rand(4,4)
S = struct with fields:
f1: [1 2 3 4 5 6 7 8 9 10]
f2: [3x2 double]
f3: [4x4 double]
计算 S
中每个数组的大小。行数和列数都是一个 3×1 数值数组。
[nrows,ncols] = structfun(@size,S)
nrows = 3×1
1
3
4
ncols = 3×1
10
2
4
输入参数
func
— 要应用的函数
函数句柄
要应用于输入标量结构体字段的函数,指定为函数句柄。
func
可以对应于多个函数文件,因此可以表示一组重载函数。在这些情况下,MATLAB® 将基于输入参量的类来确定调用哪个函数。
示例: A = structfun(@max,S)
返回 S
的每个字段的最大值。
S
— 输入结构体
标量结构体
输入结构体,指定为标量结构体。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: A = structfun(@mean,S,'UniformOutput',false)
以结构体形式返回 mean
的输出,此结构体的字段与 S
相同。
UniformOutput
— True 或 false
true
(默认) | false
True 或 false,指定为以逗号分隔的对组,其中包含 'UniformOuput'
和 true
(1
) 或 false
(0
)。
| 描述 |
---|---|
|
|
|
|
ErrorHandler
— 用于捕获错误的函数
函数句柄
用于捕获错误的函数,指定为以逗号分隔的对组,其中包含 'ErrorHandler'
和一个函数句柄。如果 func
引发错误,'ErrorHandler'
指定的错误处理程序将捕获该错误,并执行该函数中指定的操作。错误处理程序必须以两种方式处理错误:或者引发错误,或者返回与 func
同样数量的输出。如果 'UniformOutput'
的值为 true,则错误处理程序的输出参量必须为标量,而且数据类型必须与 func
的输出相同。
错误处理程序的第一个输入参量是包含以下字段的结构体:
identifier
- 错误标识符message
- 错误消息文本index
- 输入数组中func
引发错误的位置的线性索引
错误处理程序的其余输入参量是致使 func
引发错误的 func
调用的输入参量。
假设 func
返回两个双精度值作为输出参量。您可以将错误处理程序指定为 'ErrorHandler',@errorFunc
,其中 errorFunc
是引发警告并返回两个输出参量的函数。
function [A,B] = errorFunc(S,varargin) warning(S.identifier, S.message); A = NaN; B = NaN; end
如果您不指定 'ErrorHandler'
,则 structfun
会再次引发由 func
引发的错误。
输出参量
A
— 输出数组
任何数据类型的列向量 | 标量结构体
输出数组,以任何数据类型的列向量形式或以标量结构体形式返回。
默认情况下,structfun
将 func
的输出串联成列向量。func
必须返回标量。如果 func
返回对象,则对象所属的类必须满足以下要求。
支持通过对象数组的线性索引进行赋值
具有一个
reshape
方法,可返回与输入大小相同的数组
如果 'UniformOutput'
名称-值对组参量的值为 false
(0
),则 structfun
以标量结构体的字段形式返回输出。在这种情况下,func
的输出可以具有任意大小和不同的数据类型。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
不支持
ErrorHandler
选项。输出数目必须小于或等于 3。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)