在matlab中将矩阵数组(包括字符串)转换为扩展矩阵

时间:2013-01-14 10:16:17

标签: matlab

我正在尝试为任意电路(非常像spice)进行节点分析的脚本。我想从文本文件中导入数据并创建一个基于其进一步操作的矩阵。 所以我使用了文本扫描

fid = fopen('text2.txt');
netlist = textscan(fid,'%s%s%d%d%d%d%f');

所以对于这样的输入文件:

R1 R 1 0 3 0 0 
C1 C 1 0 5 0 0 
L1 L 2 1 10 0 0 
R2 R 1 2 1 0 0 
i1 Iac 2 0 1 1 0.523

结果将是这个

 {5x1 cell}    {5x1 cell}    [5x1 int32]    [5x1 int32]    [5x1 int32]    [5x1 int32]
 [5x1 double]
问题是,现在我不能从matrice中调用任何单个值。所以我想弄清楚如何重新创建原始矩阵(如果可能的话),如果这不起作用,你能告诉我一种调用单个元素的方法(例如C in(2,2)? 提前致谢

2 个答案:

答案 0 :(得分:2)

单元格数组只是存储数据的另一种方式。具体而言,当每个单元格包含不同类型或不同维度的数据时,需要单元格数组(在这种情况下,使用矩阵将无效)。

要访问单元格数组中的单个元素,请使用花括号({})。在textscan您的数据存储为列后,您首先按C{i}访问第i列。

然后你需要考虑你的细胞包含什么。第2列包含字符串,因此它是另一个单元格数组(您也可以在结果中验证它 - 第2列被描述为{5x1 cell})。因此,您需要再次使用花括号。如果要访问第二列中的第二个元素,则必须编写:

C{2}{2}

<强> P.S。
如果您要访问第3列中的第2个元素,则您将使用圆括号()作为第二个下标,因为第二列是向量。在这种情况下,语法应为:

C{3}(2)

答案 1 :(得分:0)

我假设那些输出矩阵存储在变量中,或者存储在另一个单元数组中?

你可以做的是将两个文本数组保持为单元格数组,你可以找到像这样的特定字符串的行(我可能会将ismember的参数反转):

find(ismember(FirstCellArray, "R1") == 1)

然后你可以将数值数组合成一个矩阵。你必须在这里指定它们的存储方式,但是可以说它们位于名为col1,col2等的单独变量中(显然它们不是,你可能需要使用cell2mat但是我们需要看到容纳它们的单元矩阵的结构)那么你可以像这样组合它们:

NumberMatrix = [col1, col2, col3 ...];

你可能需要将它们抛回双打,但我对此表示怀疑:

NumberMatrix = [double(col1), double(col2), double(col3) ...];

现在,如果你想要行R1 R的第3个数字值,你可以去

index1 = find(ismember(FirstCellArray, "R1") == 1);
index2 = find(ismember(SecondCellArray, "R") == 1);
rowIndex = intersect(index1, index2);
value = NumberMatrix(rowIndex, 3)