Arrays MATLAB单元数组索引和循环
我试图创建一个脚本,从文本文件中读取数据,并将数据绘制到散点图上 例如,假设文件名为prices.txt,包含:Arrays MATLAB单元数组索引和循环,arrays,matlab,loops,while-loop,cell,Arrays,Matlab,Loops,While Loop,Cell,我试图创建一个脚本,从文本文件中读取数据,并将数据绘制到散点图上 例如,假设文件名为prices.txt,包含: Pens 2 4 Pencils 1.5 3 Rulers 3 3.5 Sharpeners 1 3 Highlighters 3 4 其中第2列和第3列是两个不同商店的商品价格 我的脚本应该做的是读取价格,计算(使用另一个函数)商店的未来价格,并将这些价格绘制到散点图上,其中x是一个商店,y是另一个商店。这是一个愚蠢的例子,我知道,但它符合描述 不要太担心其他函数的计算,只要假
Pens 2 4
Pencils 1.5 3
Rulers 3 3.5
Sharpeners 1 3
Highlighters 3 4
其中第2列和第3列是两个不同商店的商品价格
我的脚本应该做的是读取价格,计算(使用另一个函数)商店的未来价格,并将这些价格绘制到散点图上,其中x是一个商店,y是另一个商店。这是一个愚蠢的例子,我知道,但它符合描述
不要太担心其他函数的计算,只要假设它做了它应该做的
基本上,我得出了以下结论:
pricesfile = fopen('Prices.txt');
prices = textscan(pricesfile, '%s %d d');
fclose(pricesfile);
count = 1;
while count <= length(prices{1})
for item = constants{1}
name = constants{1}{count};
store_A = prices{2}{count};
store_B = prices{3}{count};
(...other function goes here...)
end
end
然后,我会在散点图上画出向量中的那些项目,并使用向量的名称作为标签
我不太确定如何执行我的代码的其余部分,甚至不确定我所写的内容是否能帮助我找到解决方案
请提前帮助和感谢
pricesfile = fopen('Prices.txt');
data = textscan(pricesfile, '%s %d d');
fclose(pricesfile);
你的思路是正确的,但在这之后(通过一点黑客攻击),你实际上不需要一个循环:
plot(repmat(data{2},1,2)', repmat(data{3},1,2)', '.')
legend(data{1})
您不想做的是创建以字符串命名的变量。而是将它们存储在一个带有名称数组的数组中(这基本上就是textscan
代码所提供的内容)。Matlab非常擅长处理矩阵/数组
您还可以将price
数组拆分,例如:
names = prices{1};
prices = [data{2:3}];
现在您可以很容易地执行价格计算,如
价格=价格*100
plot(prices_cents(:,[1,1]), prices_cents(:,[2,2]))
legend(names)
请注意,上面的
[1,1]
等只是使用索引作为实现repmat
功能的一种简捷方法…谢谢,我该如何使用我提到的其他功能首先对文本文件中的数据执行必要的计算?我在尝试将相同的功能应用于不同大小的单元格数组(10x3)时遇到了一个问题. 像这样做:[code]plot(repmat(x{11:20})',“,”)[code]不会产生正确的结果。而且,像plot(x(11:20))这样的操作只会产生一个错误“从单元格转换为双精度是不可能的”
plot(prices_cents(:,[1,1]), prices_cents(:,[2,2]))
legend(names)