表变量名是否可以以数字字符开头?

时间:2017-09-14 15:52:02

标签: matlab variables matlab-table

我正在运行这样的事情:

table = readtable(path,'ReadVariableNames',true);

在.csv文件中,第一行的所有单元格都包含字符串标识符,如'99BM''105CL'等。一切都以数字开头。上面的命令提供了一个包含变量名称的表,如'x99BM''x105CL'等。

是否有可能摆脱这个'x'?我需要将这些标识符与另一个没有此'x'的表的列进行比较。

2 个答案:

答案 0 :(得分:1)

不,表变量名称不能以数字开头,因为它们遵循与normal variables相同的命名约定。 'x'会自动添加readtable以创建有效名称。调用Warning: Variable names were modified to make them valid MATLAB identifiers. The original names are saved in the VariableDescriptions property. 时,您应该已经注意到此警告:

'x'

所以,你无法摆脱表中的>> T.Properties.VariableDescriptions ans = 1×2 cell array 'Original column heading: '99BM'' 'Original column heading: '105CL'' 。但是,如果您需要进行任何比较,可以使用readtable中保存的原始值进行比较,这些值将采用以下格式:

originalNames = regexp(T.Properties.VariableDescriptions, '''(.+)''', 'tokens', 'once');
originalNames = vertcat(originalNames{:});

originalNames =

  2×1 cell array

    '99BM'
    '105CL'

您可以使用VariableDescriptions property解析这些内容,例如:

import cv2
import numpy as np 

img = cv2.imread(images[14], 1)
dst_1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imwrite("path/f.jpg", dst_1)

然后在你需要做的任何字符串比较中使用它们。

答案 1 :(得分:0)

没有。如gnovice所述,readtable函数自动重命名无效名称。它通过调用matlab.lang.makevalidname并将输出设置为列名来完成此操作。

如果我理解正确,您将一个表中列的内容与另一个表的列名称进行比较。在这种情况下,contains(['x' <contents of single row of column>], table.VariableNames)将x前置于表列的行中的值(对于此实现,您需要循环遍历表的每一行),然后将此字符串与表的变量名称进行比较。您也可以使用arrayfun或者其他内容在一行中执行此操作,但我现在正从内存中执行此操作,并且无法回想起正确的语法。