我正在尝试为任意电路(非常像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)?
提前致谢
答案 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)