Matlab数据类型

本篇介绍我在南农matlab课程上的所学,我对老师ppt上的内容重新进行了整理并且给出代码案例。主要内容在矩阵。如果真的想学matlab,我不认为有任何文档能够超过官方文档,请移步至官网,本篇说实话只是写出来给自己和学弟学妹作期末复习用的,没有任何学习价值。还是那句话,真想学明白,请看官方文档。

matlab默认显示运算结果,但在赋值语句后加分号只执行赋值操作

数值

双精度与单精度:double, single
符号整型与无符号整型:int8, unit8
实型与复型:real, imag

结构

structure

元胞

cell

% 注释

format

format 只影响输出格式不影响数据存储

代码含义
format 显示小数点后4位
format long小数点后15位
format short e5位有效数字科学计数法
format long e16位有效数字科学计数法
format rat近似有理数

% 小数点后4位
>> format
>> pi

ans =

    3.1416

% 小数点后15位
>> format long
>> pi

ans =

   3.141592653589793

% 5位有效数字的科学计数法
>> format short e
>> pi

ans =

   3.1416e+00

% 16位有效数字的科学计数法
>> format long e
>> pi

ans =

     3.141592653589793e+00

% 近似有理数
>> format rat
>> pi

ans =

     355/113   

预定义变量

变量名表示数值
ans 缺省变量名
pi 圆周率
eps浮点运算的相对精度
inf 正无穷
NaN不定值0/0
realmax/realmin最大/最小的浮点数
i,j虚数单位
nargin,nargout所用函数的输入/输出变量数目
>> 1

ans =

     1

>> pi

ans =

    3.1416

>> eps

ans =

   2.2204e-16

>> inf

ans =

   Inf

>> NaN

ans =

   NaN

>> realmax

ans =

  1.7977e+308

>> realmin

ans =

  2.2251e-308

>> i

ans =

   0.0000 + 1.0000i

>> j

ans =

   0.0000 + 1.0000i

内存变量的管理

whos, who显示workspace中的变量名,clear删除workspace中的所有变量

>> a=1,b=2

a =

     1


b =

     2

>> who

您的变量为:

a  b  

>> whos
  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x1                 8  double

>> clear
>> whos
>>           

逻辑运算与关系运算

逻辑运算

运算符含义
&
``
~

关系运算

运算符含义
>大于
<小于
>=大于等于
<=小于等于
==等于
~=不等于

序列

% 从1开始到4结束每隔0.5取一个
>> 1:0.5:4

ans =

    1.0000    1.5000    2.0000    2.5000    3.0000    3.5000    4.0000

% 从1开始到2结束一共有10个等差的数
>> linspace(1,2,10)

ans =

    1.0000    1.1111    1.2222    1.3333    1.4444    1.5556    1.6667    1.7778    1.8889    2.0000

% 从10^1开始到10^2结束一共有10个等比的数
>> logspace(1,2,10)

ans =

   10.0000   12.9155   16.6810   21.5443   27.8256   35.9381   46.4159   59.9484   77.4264  100.0000
   

矩阵

matlab中的矩阵是按列存放的,也就是说你如果用序列创建矩阵,是一列一列依次填满的。

创建矩阵

方括号括起来表示矩阵,分号表示换行,同行元素间以空格或逗号隔开,矩阵元素可以是运算表达式

>> mat = [1 2 3 ; 4 5 6]

mat =

     1     2     3
     4     5     6

特殊矩阵的创建

函数作用
zeors(m,n)产生 m × n m\times n m×n零矩阵,方阵情况时可以省略第二个参数
zeros(size(A))产生与矩阵A同样大小的零矩阵
eye(m,n)构建单位矩阵
ones(m,n)构建全1矩阵
randi([a, b], m, n)元素在[a, b]之间的 m × n m\times n m×n随机矩阵
>> zeros(3,4)

ans =

     0     0     0     0
     0     0     0     0
     0     0     0     0

>> eye(3,4)

ans =

     1     0     0     0
     0     1     0     0
     0     0     1     0

>> ones(3,4)

ans =

     1     1     1     1
     1     1     1     1
     1     1     1     1

>> randi([10,50], 5 ,5)

ans =

    47    21    49    27    11
    15    32    49    47    44
    47    49    29    42    48
    35    49    42    49    37
    13    16    15    36    41

利用 M 文件或 TXT 文件建立矩阵

可以通过 .m 脚本文件或 .txt 文本文件创建较大、复杂的矩阵。这样做的好处是便于维护、复用或从外部导入数据。

使用 .m 文件创建矩阵

  1. 打开 MATLAB 自带的 Editor 或使用任意文本编辑器。

  2. 输入如下内容(定义一个矩阵 mymat):

    % 文件名:mymatrix.m
    mymat = [
        1, 2, 3;
        4, 5, 6;
        7, 8, 9
    ];
    
  3. 将文件保存为 mymatrix.m,并确保保存在 MATLAB 当前工作目录中。

    >> mymatrix
    
    mymat =
    
         1     2     3
         4     5     6
         7     8     9
    

使用 .txt 文件读取纯数据矩阵

适用于数据文件中只包含纯数字(不含变量名)。

  1. 创建一个名为 mymatrix.txt 的文本文件,内容如下:

    1 2 3
    4 5 6
    7 8 9
    
  2. 在 MATLAB 中读取该文件内容为矩阵:

    mymat = load('mymatrix.txt');
    

    或使用更通用的函数:

    mymat = readmatrix('mymatrix.txt');
    

矩阵切片

MATLAB 中的矩阵切片(索引)操作

矩阵的切片操作使用括号 ( , ) 表示,其中:

  • 前一部分表示 行的索引
  • 后一部分表示 列的索引
  • 可以使用数字、向量、冒号 :、关键字 end 等方式指定位置。

基本语法

A(i, j)           % 取第 i 行第 j 列的元素
A(i, :)           % 取第 i 行的所有列
A(:, j)           % 取第 j 列的所有行
A(m:n, p:q)       % 取第 m 到 n 行、第 p 到 q 列的子矩阵
A([1 3], [2 4])   % 取第 1、3 行 和第 2、4 列交叉形成的子矩阵
A(end, :)         % 取最后一行的所有列
A(:, end-1:end)   % 取最后两列的所有行
>> A = [1 2 3; 4 5 6; 7 8 9]

A =

     1     2     3
     4     5     6
     7     8     9

>> A(2, 3)

ans =

     6

>> A(1, :)

ans =

     1     2     3

>> A(:, 2)

ans =

     2
     5
     8

>> A(1:2, 2:3)

ans =

     2     3
     5     6

>> A([1 3], [1 3])

ans =

     1     3
     7     9

>> 

>> A(end, :)

ans =

     7     8     9

>> A(:, end-1:end)

ans =

     2     3
     5     6
     8     9

矩阵运算

数的运算是矩阵运算的特例,所以一并包含在其中。

1. 基础算术运算符

运算符含义说明
+加法元素逐项相加,要求维度一致
-减法元素逐项相减,要求维度一致
*矩阵乘法矩阵内积规则,A的列= B的行
/右除A/BA * inv(B)
\左除A\Binv(A) * B
^矩阵幂A^nn 次矩阵乘法
>> A = [1 2; 3 4], B = [5 6; 7 8]

A =

     1     2
     3     4


B =

     5     6
     7     8

>> A + B

ans =

     6     8
    10    12

>> A - B

ans =

    -4    -4
    -4    -4

>> A * B

ans =

    19    22
    43    50

>> A / B

ans =

    3.0000   -2.0000
    2.0000   -1.0000

>> A / B * B

ans =

     1     2
     3     4

>> A \ B

ans =

    -3    -4
     4     5

>> A * (A \ B)

ans =

     5     6
     7     8

>> A ^ 2

ans =

     7    10
    15    22

2. 点运算符(逐元素操作)

运算符含义
.*元素乘法
./元素右除
.\元素左除
.^元素幂
>> A = [1 2; 3 4], B = [5 6; 7 8]

A =

     1     2
     3     4


B =

     5     6
     7     8

>> A .* B

ans =

     5    12
    21    32

>> A ./ B

ans =

    0.2000    0.3333
    0.4286    0.5000

>> A .\ B

ans =

    5.0000    3.0000
    2.3333    2.0000

>> A .^ 2

ans =

     1     4
     9    16

3. 常用数学函数

下述函数若作用于矩阵则是对每一元素进行的。

函数说明
sqrt(x)平方根
pow2(x)2的幂
log(x)自然对数
log2(x)2为底的对数
log10(x)10为底的对数
exp(x)e为底的指数
sign(x)符号函数
mod(x,y)余数,x为负数时是向负数的余数
rem(x,y)余数,x为负数时是向正数的余数
round(x)四舍五入
floor(x)向下取整
ceil(x)向上取整
fix(x)向 0 方向取整
conj(x)复数共轭
real(x)复数实部
imag(x)复数虚部
abs(x)
angle(x)相角
>> sqrt([4 9])

ans =

     2     3

>> pow2([1 2 3])

ans =

     2     4     8

>> log(exp(1))

ans =

     1

>> log2(8)

ans =

     3

>> log10(100)

ans =

     2

>> exp(1)

ans =

    2.7183

>> sign([-3 0 4])

ans =

    -1     0     1

>> mod(-7, 3)

ans =

     2

>> rem(-7, 3)

ans =

    -1

>> round(3.6)

ans =

     4

>> round(3.4)

ans =

     3

>> floor(3.6)

ans =

     3

>> ceil(3.2)

ans =

     4

>> fix(-3.7)

ans =

    -3

>> fix(3.7)

ans =

     3

>> conj(1+2i)

ans =

   1.0000 - 2.0000i

>> real(1+2i)

ans =

     1

>> imag(1+2i)

ans =

     2

>> abs(3+4i)

ans =

     5

>> angle(pi/4)

ans =

     0

4. 矩阵变换函数

函数说明
transpose(A)A.'非共轭转置
fliplr(A)左右翻转
flipud(A)上下翻转
flipdim(A,1)将矩阵按第一个维度进行翻转
rot90(A)旋转90度
diag(A)对角矩阵
rref(A)最简行阶梯形矩阵
tril(A)下三角矩阵
triu(A)上三角矩阵
reshape(A,m,n)将矩阵A重新排成 m × n m\times n m×n的矩阵
>> A = [1 2; 3 4]

A =

     1     2
     3     4

>> transpose(A)

ans =

     1     3
     2     4

>> A.'

ans =

     1     3
     2     4

>> fliplr(A)

ans =

     2     1
     4     3

>> flipud(A)

ans =

     3     4
     1     2

>> flipdim(A, 1)

ans =

     3     4
     1     2

>> flipdim(A, 2)

ans =

     2     1
     4     3

>> rot90(A)

ans =

     2     4
     1     3

>> diag(A)

ans =

     1
     4

>> rref(A)

ans =

     1     0
     0     1

>> tril(A)

ans =

     1     0
     3     4

>> triu(A)

ans =

     1     2
     0     4

>> reshape(A, 1, 4)

ans =

     1     3     2     4

5. 矩阵运算函数

函数含义
det(A)行列式
inv(A)逆矩阵
rank(A)矩阵秩
trace(A)对角线元素之和
norm(A)矩阵范数
cond(A)矩阵条件数
[V,D]=eig(A)矩阵的特征值分解,V表示特征向量,D表示特征值
[Q,R]=qr(A)矩阵的QR分解
[L,U]=lu(A)矩阵的LU分解
>> det([1 2; 3 4])

ans =

    -2

>> inv([1 2; 3 4])

ans =

   -2.0000    1.0000
    1.5000   -0.5000

>> rank([1 2; 2 4])

ans =

     1

>> trace([1 2; 3 4])

ans =

     5

>> norm([3 4])

ans =

     5

>> cond([1 2; 3 4])

ans =

   14.9330

>> [V,D] = eig([1 2; 3 4])

V =

   -0.8246   -0.4160
    0.5658   -0.9094


D =

   -0.3723         0
         0    5.3723

>> [Q,R] = qr([1 2; 3 4])

Q =

   -0.3162   -0.9487
   -0.9487    0.3162


R =

   -3.1623   -4.4272
         0   -0.6325

>> [L,U] = lu([1 2; 3 4])

L =

    0.3333    1.0000
    1.0000         0


U =

    3.0000    4.0000
         0    0.6667

6.向量内积/外积

函数主要作用
dot点积
cross叉积
>> dot([1 2 3], [4 5 6])

ans =

    32

>> cross([1 2 3], [4 5 6])

ans =

    -3     6    -3

7.其他函数

函数主要作用向量行为矩阵行为(默认)
min/max极值单值每列最值
mean平均值单值每列均值
median中位数单值每列中位数
std标准差单值每列标准差
diff相邻差分长度减1每列差分
sort升序排序排序向量每列排序
sum求和总和每列求和
prod乘积累乘每列累乘
cumsum累加和向量累加每列累加
cumprod累乘积向量累乘每列累乘
length最大维长度向量长度二维矩阵为max(行,列)
size维度信息[1,n][m,n]
norm向量/矩阵范数L2 范数谱范数(最大奇异值)
>> A = reshape(1:16, 4, 4)

A =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16

>> min(A)

ans =

     1     5     9    13

>> max(A)

ans =

     4     8    12    16

>> mean(A)

ans =

    2.5000    6.5000   10.5000   14.5000

>> median(A)

ans =

    2.5000    6.5000   10.5000   14.5000

>> std(A)

ans =

    1.2910    1.2910    1.2910    1.2910

>> diff(A)

ans =

     1     1     1     1
     1     1     1     1
     1     1     1     1

>> sort(A)

ans =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16

>> sum(A)

ans =

    10    26    42    58

>> prod(A)

ans =

          24        1680       11880       43680

>> cumsum(A)

ans =

     1     5     9    13
     3    11    19    27
     6    18    30    42
    10    26    42    58

>> cumprod(A)

ans =

           1           5           9          13
           2          30          90         182
           6         210         990        2730
          24        1680       11880       43680

>> length(A)

ans =

     4

>> size(A)

ans =

     4     4

>> norm(A)

ans =

   38.6227

字符串

创建字符串以及字符串数组

单引号将内容括起来表示一个字符串,以ASC2码存储。

% 创建字符串
a = 'ABC'
% 创建字符串数组,不可以使用单引号,否则输出会是字符串
>> a = ["hello" "word"]

a = 

  1x2 string 数组

    "hello"    "word"

>> a = ['hello', 'word']

a =

    'helloword'

字符函数

函数含义
abs('ABC')返回字符串中每个字符的 ASCII 码(与 double 等价)
double('ABC')返回字符串中每个字符的 ASCII 码
char([65 66 67])将 ASCII 数字转换为对应字符,结果为 'ABC'
int2str(123)将整数转换为字符串 '123'
num2str(3.14)将数值(整数或浮点数)转换为字符串 '3.14'
str2num('1.23 4.56')将字符串解析为数值向量 [1.23 4.56]
strcat('ab', 'cd')字符串拼接,结果为 'abcd',自动去除尾部空格
strvcat('abc', 'defg')垂直拼接字符矩阵,按最大长度补空格
strcmp('abc','abc')比较字符串是否完全相同,返回 1(true)或 0(false)
strncmp('abcdef','abcxyz',3)比较字符串前3个字符是否相同,返回逻辑值
strrep('cat','a','o')将字符串中的 'a' 替换为 'o',结果为 'cot'
strmatch('he', ['hello','hero','hi'])返回所有以 'he' 开头的字符串索引
eval()将字符串理解为代码执行
>> abs('A')

ans =

    65

>> double('A')

ans =

    65

>> char(65)

ans =

    'A'

>> int2str(123)

ans =

    '123'

>> num2str(3.14)

ans =

    '3.14'

>> str2num('1.23 4.56')

ans =

    1.2300    4.5600

>> strcat('ab', 'cd')

ans =

    'abcd'

>> strcat('ab', 'cd ')

ans =

    'abcd'

>> strvcat('abc', 'defg')

ans =

  2x4 char 数组

    'abc '
    'defg'

>> strcmp('abc', 'abc')

ans =

  logical

   1

>> strcmp('abc', 'ab')

ans =

  logical

   0

>> strncmp('abcdef', 'abcxyz', 3)

ans =

  logical

   1

>> strncmp('abcdef', 'abcxyz', 4)

ans =

  logical

   0

>> strrep('cat', 'a', 'o')

ans =

    'cot'

>> strmatch('he', 'hi')

ans =

     []

>> strmatch('he', 'he')

ans =

     1

>> strmatch('he', ["he" "him"; "s" "hem"])

ans =

     1
     4

>> strmatch('he', ["hello";"hero";"hi"])

ans =

     1
     2

>> eval("a=2")

a =

     2

### Hive 大数据性能调优最佳实践 #### 一、配置优化 对于云服务器上的Hive大数据环境,合理的资源配置至关重要。调整JVM参数可以有效提升查询效率[^1]。 ```bash set mapreduce.map.memory.mb=4096; set mapreduce.reduce.memory.mb=8192; ``` 适当增加Map和Reduce阶段内存分配有助于减少溢写磁盘次数,从而加快执行速度。 #### 二、表结构设计 采用分区(partitioning)与分桶(bucketing),可显著降低扫描范围并提高读取速率。通过预定义的数据分布模式来组织存储文件,使得特定条件下的过滤操作更加高效[^2]。 ```sql CREATE TABLE sales ( order_id STRING, customer_name STRING, amount DOUBLE ) PARTITIONED BY (year INT, month INT); ``` 此命令创建了一个按年份和月份划分的销售记录表格实例。 #### 三、查询语句改写 利用子查询因子化(subquery factoring)以及谓词下推(predicate pushdown)特性,在不影响逻辑的前提下重构SQL表达式,以便更好地发挥引擎内部优化器的作用[^3]。 ```sql WITH filtered_sales AS ( SELECT * FROM sales WHERE year >= 2020 AND year <= 2022 ) SELECT COUNT(*) FROM filtered_sales fs JOIN customers c ON fs.customer_name = c.name; ``` 上述例子展示了如何先筛选出目标时间段内的交易记录再与其他表关联计算总数的过程。 #### 四、启用ORC/Parquet格式 相较于传统的TextFile或SequenceFile格式而言,列式存储方式如ORC(optimized row columnar)或者Parquet能够提供更紧凑的空间占用率及更快捷的访问路径[^4]。 ```sql ALTER TABLE my_table SET FILEFORMAT ORC; INSERT OVERWRITE TABLE my_table SELECT * FROM old_format_table; ``` 这段脚本说明了怎样转换现有表至新的压缩编码形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值