以 Table 形式显示单元格

Display Cell in a Table Form

我想知道是否可以在使用 Octave 时以 Table 形式显示单元格。我会更容易获得 Cell 的信息。如果单列显示,我必须一直向下滚动。

元胞数组默认显示看起来有点复杂:

octave> a = {"foo", "bar", "qux"; "baz", "nof", "zot"}
a = 
{
  [1,1] = foo
  [2,1] = baz
  [1,2] = bar
  [2,2] = nof
  [1,3] = qux
  [2,3] = zot
}

如果能看到像这样的东西就更好了:

octave> a = {"foo", "bar", "qux"; "baz", "nof", "zot"}
a(1:2, 1:3) = 
{
  "foo"    "bar"    "qux"
  "baz"    "nof"    "zot"
}

但是,元胞数组的每个元胞内都可以包含任何内容。这包括其他元胞数组、结构和带有换行符的非常长的行。因此,元胞数组的合理显示在很大程度上取决于其内容以及用户对从中获取的内容感兴趣。

这意味着,由用户创建一个显示他想要的内容的功能。我将提供一个对上述情况有用的示例,这是最常见的情况,即短单行字符串的二维元胞数组。解决方案是从每列中最长的字符串动态创建 printf 格式,如下所示:

octave> a = {"foobar", "bar", "qux"; "baz", "nofnot", "zotr"};
octave> col_width = max (cellfun (@numel, a)) +4
col_width =

   10   10    8

octave> row_template= [sprintf("%%%is", col_width) "\n"]
row_template = %10s%10s%8s

octave> printf (row_template, a'{:})
    foobar       bar     qux
       baz    nofnot    zotr

或单行:

octave> printf ([sprintf("%%%is", max (cellfun (@numel, a))+4) "\n"], a'{:})
    foobar       bar     qux
       baz    nofnot    zotr

更复杂的元胞数组,具有更复杂但更有条理的结构,可以改用 Octave 的 dataframe。例如:

octave> pkg load dataframe
octave> C = {"Patient Name", "Volume", "Quality", "Owner"; "Joe", 200, .95, "MR"; "Dana", 186, .93, "MR"; "Cassidy", 197, .96, "SP"};
octave> dataframe (C)
ans = dataframe with 3 rows and 4 columns
_1 Patient_Name Volume Quality Owner     
Nr         char double  double  char     
 1          Joe    200 0.95000    MR     
 2         Dana    186 0.93000    MR     
 3      Cassidy    197 0.96000    SP     

您可以使用 Tablicious 包以表格形式显示信息。

安装:

pkg install https://github.com/apjanke/octave-tablicious/releases/download/v0.3.5/tablicious-0.3.5.tar.gz;

回答问题:

您可以使用 tablicious 包中名为 cell2table 的方法将单元格转换为 table。

    C =
{
  [1,1] = 1
  [2,1] = 2
  [3,1] = 3
  [4,1] = 4
  [5,1] = 5
  [1,2] = Adam
  [2,2] = Jane
  [3,2] = Amit
  [4,2] = Leena
  [5,2] = Desh
  [1,3] = 23
  [2,3] = 34
  [3,3] = 22
  [4,3] = 45
  [5,3] = 100
  [1,4] = M
  [2,4] = F
  [3,4] = M
  [4,4] = F
  [5,4] = M
}

out = cell2table(C)
prettyprint(out)

输出:

Ԁout =
table: 5 rows x 4 variables
  VariableNames: Var1, Var2, Var3, Var4
------------------------------
| Var1 | Var2  | Var3 | Var4 |
------------------------------
| 1    | Adam  | 23   | M    |
| 2    | Jane  | 34   | F    |
| 3    | Amit  | 22   | M    |
| 4    | Leena | 45   | F    |
| 5    | Desh  | 100  | M    |
------------------------------
>>

Link 到官方文档: https://tablicious.janklab.net/user-guide/tablicious.pdf