MATLAB在单元格上阵列访问数据
使用两种方法来引用单元阵列的元素:
- 封闭的索引在第一个 bracket (),是指一组单元格
- 封闭的在大括号{},的索引单个单元格内的数据
括在第一支架的索引,它指的是单元格的集。
单元阵列索引平稳括号单元格集合。
例如:
1. c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; 2. c(1:2,1:2)
MATLAB执行上述语句,返回以下结果:
ans = 'Red' 'Blue' [ 1] [ 2]
同样可以用花括号“{ }”索引访问单元格的内容。
例如:
1. c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; 2. c{1, 2:4}
MATLAB执行上述语句,返回以下结果:
ans = Blue ans = Green ans = Yellow
MATLAB冒号符号
MATLAB 中可以使用 “:” 来建立矢量、下标数组和指定的迭代,是最有用的 MATLAB 运算符之一。
下述例子建立了一个包括 1~10 的一个行向量:
1:10
MATLAB执行该语句,结果返回一个行向量,包含了从1到10的整数:
1. ans = 2. 1 2 3 4 5 6 7 8 9 10
如果想指定以外的一个增量值,例如:
100: -5: 50
MATLAB执行该语句,返回以下结果:
1. ans = 2. 100 95 90 85 80 75 70 65 60 55 50
让我们再举一个例子:
0:pi/8:pi
MATLAB执行该语句,返回以下结果:
ans = Columns 1 through 7 0 0.3927 0.7854 1.1781 1.5708 1.9635 2.3562 Columns 8 through 9 2.7489 3.1416
可以使用冒号 “:” 运算符建立矢量指数来选择行、列或数组中的元素。
下表描述了其用于此目的(让我们有一个矩阵A):
格式 | 目的 |
A(:,j) | 是A的第 j 列 |
A(i,:) | 是A的第 i 行 |
A(:,:) | 是等效的二维数组;对于矩阵,这与 A 相同 |
A(j:k) | 是A(j),A(j + 1),...,A(k) |
A(:,j:k) | 是 A(:,j), A(:,j+1),...,A(:,k) |
A(:,:,k) | 是三维数组 A 的第 k 页 |
A(i,j,k,:) | 是四维数组 A 中的矢量;矢量包括 A(i,j,k,1),A(i,j,k,2),A(i,j,k,3)等 |
A(:) | 是 A 的所有要素,被视为单列;在赋值语句的左侧,A(:) 填充A,保留以前的形状;在这种情况下,右侧必须包含与A相同数量的元素。 |
详细例子
在 MATLAB 中建立一个脚本文件,并输入下述代码:
A = [1 2 3 4; 4 5 6 7; 7 8 9 10] A(:,2) % second column of A A(:,2:3) % second and third column of A A(2:3,2:3) % second and third rows and second and third columns
运行该文件,显示下述结果:
A = 1 2 3 4 4 5 6 7 7 8 9 10 ans = 2 5 8 ans = 2 3 5 6 8 9 ans = 5 6 8 9
MATLAB数字
MATLAB 支持的数字类有很多,其中包括符号和无符号的整数及单精度和双精度浮点数。
默认情况下,MATLAB 存储所有数值为双精度浮点数。
MATLAB可以选择存储任何数字或数字为整数或单精度数字阵列。
MATLAB所有的数字类型支持基本的数组运算和数学运算。
MATLAB各种数字数据类型的转换
MATLAB提供各种数字数据类型转换为以下功能:
函数 | 目的 |
double | 转换为双精度数字 |
single | 转换为单精度数 |
int8 | 转换为8位有符号整数 |
int16 | 转换为16位有符号整数 |
int32 | 转换为32位有符号整数 |
int64 | 转换为64位有符号整数 |
uint8 | 转换为8位无符号整数 |
uint16 | 转换为16位无符号整数 |
uint32 | 转换为32位无符号整数 |
uint64 | 转换为64位无符号整数 |
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
x = single([5.32 3.47 6.28]) .* 7.5 x = double([5.32 3.47 6.28]) .* 7.5 x = int8([5.32 3.47 6.28]) .* 7.5 x = int16([5.32 3.47 6.28]) .* 7.5 x = int32([5.32 3.47 6.28]) .* 7.5 x = int64([5.32 3.47 6.28]) .* 7.5
运行该文件,显示以下结果:
x = 39.9000 26.0250 47.1000 x = 39.9000 26.0250 47.1000 x = 38 23 45 x = 38 23 45 x = 38 23 45 x = 38 23 45
详细例子
对前面的例子进行扩展,建立一个脚本文件,输入下述代码:
x = int32([5.32 3.47 6.28]) .* 7.5 x = int64([5.32 3.47 6.28]) .* 7.5 x = num2cell(x)
运行该文件,显示以下结果:
x = 38 23 45 x = 38 23 45 x = [38] [23] [45]
最小和最大整数
MATLAB中使用函数 intmax() 和 intmin() 返回最大和最小的值,它可以表示所有类型的整数。
这两个功能整数数据类型作为参数,例如,intmax(int8) 或 intmin(int64) 最大值和最小值值,可以表示的整数数据类型并返回。
详细例子
下面的例子说明如何得到最小值和最大值的整数。
在MATLAB中建立一个脚本文件,输入下述代码:
% displaying the smallest and largest signed integer data str = 'The range for int8 is: %d to %d '; sprintf(str, intmin('int8'), intmax('int8')) str = 'The range for int16 is: %d to %d '; sprintf(str, intmin('int16'), intmax('int16')) str = 'The range for int32 is: %d to %d '; sprintf(str, intmin('int32'), intmax('int32')) str = 'The range for int64 is: %d to %d '; sprintf(str, intmin('int64'), intmax('int64')) % displaying the smallest and largest unsigned integer data str = 'The range for uint8 is: %d to %d '; sprintf(str, intmin('uint8'), intmax('uint8')) str = 'The range for uint16 is: %d to %d '; sprintf(str, intmin('uint16'), intmax('uint16')) str = 'The range for uint32 is: %d to %d '; sprintf(str, intmin('uint32'), intmax('uint32')) str = 'The range for uint64 is: %d to %d '; sprintf(str, intmin('uint64'), intmax('uint64'))
运行该文件,显示以下结果:
ans = The range for int8 is: -128 to 127 ans = The range for int16 is: -32768 to 32767 ans = The range for int32 is: -2147483648 to 2147483647 ans = The range for int64 is: -9223372036854775808 to 9223372036854775807 ans = The range for uint8 is: 0 to 255 ans = The range for uint16 is: 0 to 65535 ans = The range for uint32 is: 0 to 4294967295 ans = The range for uint64 is: 0 to 1.844674e+19
MATLAB最小和最大浮点数
使用函数 realmax() 和 realmin() 返回的最大值和最小值,可以表示为浮点数。
这两个函数调用时的参数'单',返回的最大值和最小值值,可以代表单精度数据类型以及何时被称为'双'的参数,返回的最大值和最小值值,可以表示双精度数据类型。
详细实例
下面的例子说明如何获得最大和最小的浮点数。
在MATLAB中建立一个脚本文件,输入下述代码:
% displaying the smallest and largest single-precision % floating w3cschool number str = 'The range for single is: %g to %g and %g to %g'; sprintf(str, -realmax('single'), -realmin('single'), ... realmin('single'), realmax('single')) % displaying the smallest and largest double-precision % floating w3cschool number str = 'The range for double is: %g to %g and %g to %g'; sprintf(str, -realmax('double'), -realmin('double'), ... realmin('double'), realmax('double'))
运行该文件,显示以下结果:
ans = The range for single is: -3.40282e+38 to -1.17549e-38 and 1.17549e-38 to 3.40282e+38 ans = The range for double is: -1.79769e+308 to -2.22507e-308 and 2.22507e-308 to 1.79769e+308
MATLAB字符串
本节我们学习如何在MATLAB中创建一个字符串。
例如:
my_string = 'w3cschool''在线教程'
MATLAB执行上述语句,返回以下结果:
my_string = w3cschool在线教程
MATLAB 认为所有变量,数组和字符串被视为字符数组。
让我们使用命令检查上面创建的变量:
whos
MATLAB执行上面的语句,返回以下结果:
Name Size Bytes Class Attributes my_string 1x16 32 char
你可以使用数字转换函数,如 uint8 或 uint16 字符串中的字符转换成数字代码。
char 函数整数向量转换回字符:
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
my_string = 'w3cschool''在线教程'; str_ascii = uint8(my_string) % 8-bit ascii values str_back_to_char= char(str_ascii) str_16bit = uint16(my_string) % 16-bit ascii values str_back_to_char = char(str_16bit)
运行该文件,显示以下结果:
str_ascii = Columns 1 through 14 84 117 116 111 114 105 97 108 39 115 32 80 111 105 Columns 15 through 16 110 116 str_back_to_char = w3cschool在线教程 str_16bit = Columns 1 through 10 84 117 116 111 114 105 97 108 39 115 Columns 11 through 16 32 80 111 105 110 116 str_back_to_char = w3cschool在线教程
详细例子
在MATLAB中建立一个脚本文件,输入下述代码:
doc_profile = ['Zara Ali '; ... 'Sr. Surgeon '; ... 'R N Tagore Cardiology Research Center'] doc_profile = char('Zara Ali', 'Sr. Surgeon', ... 'RN Tagore Cardiology Research Center')
运行该文件,显示以下结果:
doc_profile = Zara Ali Sr. Surgeon R N Tagore Cardiology Research Center doc_profile = Zara Ali Sr. Surgeon RN Tagore Cardiology Research Center
采取下述方式之一横向合并字符串:
- 使用MATLAB串连运算,[],并用逗号或空格分隔输入字符串。这种方法保留任何尾随空格输入数组。
- 使用字符串连接函数 strcat。此方法删除尾随空格输入
详细例子
在MATLAB中建立一个脚本文件,并输入下述代码:
name = 'Zara Ali '; position = 'Sr. Surgeon '; worksAt = 'R N Tagore Cardiology Research Center'; profile = [name ', ' position ', ' worksAt] profile = strcat(name, ', ', position, ', ', worksAt)
运行该文件,显示以下结果:
profile = Zara Ali , Sr. Surgeon , R N Tagore Cardiology Research Center profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center