matlab 理解将数组切片为变量

jw5wzhpr  于 7个月前  发布在  Matlab
关注(0)|答案(1)|浏览(85)

我是一个新手编码器(在Python),我已经得到了matlab的代码(我有0 matlab的经验)。我已经能够翻译大部分代码,但我在某个点卡住了。大体上,这段代码的目标是对数据进行傅立叶变换,然后检查结果是否符合某些规则。
我提供了一段代码,直到我感到困惑的那一行

傅立叶变换(我理解这些步骤)

num_rows = length(csvfilename);
Y = fft(csvfilename);
P1 = abs(Y).^2/num_rows;

我不明白下一行代码

P1_vec(1,:) = P1;

P1在直线的右边是什么意思?Matlab中的(1,:)是什么意思
Thank you!:)
我试着看matlab的指导文档,以及从matlab翻译到python的文档,但我没有找到任何东西。

a11xaf1n

a11xaf1n1#

MATLAB并没有真正的1D数组,你最终会得到1xN或Nx 1矩阵。

>> size([1,2,3])
ans =
     1     3

这意味着你实际上有了在MATLAB中转置“1D”数组的概念。当涉及到这些向量的转置时,大多数切片和向量操作都是故意模糊的,matlab会很高兴地忽略奇异维度,只要它有意义。

m = zeros(2,3);
m(1,:) = [1,2,3];   % assigns the first row of m to be the row vector [1,2,3]
m(2,:) = [4,5,6]';  % assigns the second row of m to be the columm vector [4;5;6]
>> m
m =
     1     2     3
     4     5     6

正如我们所看到的,MATLAB忽略了RHS是如何形成的。
那么为什么有人会选择

P_vec(1,:) = some_vector;

它确保了无论some_vector是1 × N还是N × 1矩阵,P_vec总是1 × N(我们通常称之为行向量)
我称之为matlab的草率代码(不费心去跟踪转置),在任何支持实际1D数组的语言/库中(如numpy),这个操作都不相关,因为你无论如何都不能转置这样的数组。

相关问题