gpt4 book ai didi

MATLAB `unstack` : Safe to assume ordering of new columns?

转载 作者:行者123 更新时间:2023-12-02 16:59:55 26 4
gpt4 key购买 nike

根据documentation ,Matlab 的 unstack 可以采用此表:

S=12×3 table
Storm Town Snowfall
_____ ____ ________

3 'T1' 0
3 'T3' 3
1 'T1' 5
3 'T2' 5
1 'T2' 9
1 'T3' 10
4 'T2' 12
2 'T1' 13
4 'T3' 15
2 'T3' 16
4 'T1' 17
2 'T2' 21

...并将其转换为:

U = unstack(S,'Snowfall','Town')

U=4×4 table
Storm T1 T2 T3
_____ __ __ __

3 0 5 3
1 5 9 10
4 17 12 15
2 13 21 16

假设新列是按字母顺序生成的似乎是合理的。假设如果手动操作数据,这没什么问题,但如果不能 100% 保证列的顺序,那么对于自动数据处理来说,这就是一种破坏。例如,如果Town列实际上是一个数字索引,那么新的列名将自动生成,以便成为合法的变量名,并且排序将是链接新列名的关键信息。列返回到 Town 字段中的值。如果提取 U{:,2:end} 进行操作,则数据可能全部错误,除非可以 100% 确定对新列进行排序的方案是什么。

我实际上创建了一个新列来代替 Town,其中包含有效字符串,后缀为数字索引值。这些成为新的列标题。但现实是,必须编写额外的代码来确保列以正确的顺序出现太麻烦了。它抵消了 unstack 的好处,我最终只是创建循环来一一构建新列。在时间和代码方面不高效或不优雅。我正在尝试找到一种在未来可靠地利用 unstack 的方法。

我已经提交了反馈,描述了这条信息的重要性,但我预计不会很快得到回复。同时,拆栈是一个非常有用的功能,我想知道是否有人可以权衡假设新列按字母顺序排序是否明智?

最佳答案

是的,根据我在unstack.m的代码源中的理解(您可以通过输入edit unstack来阅读它),通过使用将标识符转换为唯一索引的函数,这些列将按照Unicode字母顺序的字母顺序排列,< em>在检查标识符是否有效之前。

Unicode order具体意味着:

  • T10先于 T9
  • t10T10之后。

根据unstack,将标识符转换为唯一索引subs2inds的函数依赖于一个tabularDimension类,据说该类是(在 R2018b)时间:

%tabularDimension Internal abstract class to represent a tabular's dimension.

% This class is for internal use only and will change in a
% future release. Do not use this class.

对标识符进行排序后,使用函数matlab.lang.makeValidName进行有效性检查。 (使用默认选项'Prefix','x')如果无效,将修改标识符(默认情况下用下划线替换非法字符)。

A valid MATLAB identifier is a character vector of alphanumerics (A–Z, a–z, 0–9) and underscores, such that the first character is a letter and the length of the character vector is less than or equal to namelengthmax.

makeValidName deletes any whitespace characters before replacing any characters that are not alphanumerics or underscores. If a whitespace character is followed by a lowercase letter, makeValidName converts the letter to the corresponding uppercase character.

例如:

  • 2A 将更改为 x2A
  • ça 将更改为 x_A

特殊情况将在 matlab.lang.makeuniquestrings 的帮助下处理功能。

例如,如果您询问标识符:ç1à1,Matlab仍然能够区分它们并分别将它们重命名为x_1_1x_1


就您而言,我建议自动生成具有恒定起始字母的列,然后是带有前导零的索引,从而产生恒定数量的字符:T0001T0002、...、T0100、...、T9999

关于MATLAB `unstack` : Safe to assume ordering of new columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com