MATLAB - 如何使用for循环追加矩阵行

时间:2011-08-12 02:06:36

标签: arrays matlab vector matrix

我是半新的matlab,我已经在我的课程中使用了一段时间了,但从来没有真正被它吸收过。

我有一个相当大的矢量,它是一个准确的声音文件。我需要从这个向量中获取每128个元素,并将它们添加到矩阵中。

因此矩阵行1将包含前128个(1-128)元素,矩阵行2将包含第二个128(128-256)等...

我该怎么做呢?我查了一下matlab mathworks帮助文件,但却找不到任何东西。我知道我可以使用z = [x,y]附加矩阵,但它不适用于我......

感谢任何帮助,谢谢!

4 个答案:

答案 0 :(得分:1)

查看reshape命令。如果你以(N * 128 x 1)向量开始,然后使用reshape(A,[N,128]),你应该得到一个(N乘128)矩阵。

答案 1 :(得分:1)

您可以使用reshape命令执行此操作:

>> A = [1 2 3 4 5 6];
>> B = reshape(A, 3, 2)'
B = 
      1 2 3
      4 5 6

答案 2 :(得分:0)

正如其他人所说,reshape命令是适合您的工具。但在开始使用reshape之前,您需要确定两件事:

  1. 通常对于任何声音文件都会有一些标题信息,您需要从文件位置after开始读取标题信息。你可以找到在线手册来获取标题数据的大小,例如可以在这里找到规范的声音数据格式:https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ 如果声音文件的格式是其他的,那么你必须找到它。

  2. 要读取的样本数应截断或填充为128的倍数,因为您需要N * 128大小的矩阵

答案 3 :(得分:0)

这甚至可以稍微方便一些,因为reshape可以计算其参数本身之一

MarkD's answer中:

A = [1 2 3 4 5 6];
B = reshape(A, 3, 2)'

替换第二行
B = reshape(A, 3, [])'

[]输入告诉reshape:确定自己应该是​​什么(length(A)/3在你的情况下)