首页 > 解决方案 > 如何在 Octave 中从 STDIN 读取矩阵

问题描述

这就是输入的样子。输入的第一行是方阵大小。

3
1 2 3
4 5 6
7 8 9

标签: octaveoctave-gui

解决方案


这是一种方法。还有很多其他的。

DataStr   = fileread( 'data.txt' )               # read in whole file
StrTokens = strsplit( DataStr )                  # split into string tokens
Tokens    = cellfun( @str2double, StrTokens )    # convert string tokens to numerical
NumRows   = Tokens(1)                            # First token gives number of rows
NumElems  = NumRows ^ 2                          # Total number of elements in matrix
Elems     = Tokens(2 : 1 + NumElems)             # select appropriate elements from tokens
Matrix    = reshape( Elems, [NumRows, NumRows] ) # reshape into square matrix

这从文件中读取。如果您想将输入作为 octave 脚本“管道”输入,则可以将第一行替换为以下内容:

DataStr   = fread( stdin, 'char' )
DataStr   = char( DataStr.' )

这意味着您可以从 linux 终端调用它,如下所示:

echo -e "3\n1 2 3\n2 3 4\n3 4 5" | octave myscript.m

推荐阅读