我已经使用 python 为 MATLAB 中的项目获取了数据。我有 3 个不同的矩阵,尺寸分别为 mxn、mxn+1 和 mxn+2。我在 python scipy.io.savemat('set1.mat', mdict ={'abc1':abc1})
中使用了此命令。矩阵的每一行实际上应该是一行行向量(长度为 p)而不是标量,因此矩阵实际上是 mx(n)*p
, mx(n+1) *p
和 mx(n+2)*p
。
作为示例,我在 MATLAB 文件的顶部针对这两种情况进行了定义
A = ones(1,5)
B = 2*ones(1,5)
C = 3*ones(1,5)
现在我可以直接在 MATLAB 中编写:
abc1 = [A B C]
这看起来很奇怪,但却给了我想要的输出。
abc1 =
Columns 1 through 14
1 1 1 1 1 2 2 2 2 2 3 3 3 3
Column 15
3
现在,如果我使用 load 导入数据,我可以获取 abc1(1,:)
。这给了我:
ans = A B C
或者我可以采取:
abc1(1,1)
ans = A
如何让它识别 A 是向量的名称?
最佳答案
根据我对你问题的理解,听起来你有(在 matlab 中):
A = ones(1,5);
B = 2*ones(1,5);
C = 3*ones(1,5);
load('set1.mat');
然后你想做类似的事情:
D = [abc1];
对于 abc1 = 'A B C'
,结果相当于 [A B C]
。
有多种方法可以实现此目的。第一个也可能是最简单的方法是使用 eval,尽管我不敢提及它,因为大多数人都会考虑 eval to be evil .
在你的情况下,这看起来像:
D = eval(['[' abc1 ']']);
更好的解决方案是利用 dynamic field names可以用结构完成的技巧:
foo.A = ones(1,5);
foo.B = 2*ones(1,5);
foo.C = 3*ones(1,5);
load('set1.mat');
D = [foo.(abc1(1,1)) foo.(abc1(1,2)) foo.(abc1(1,3))];
或者,如果您需要连接超过 3 列,您可以使用 cat
反复执行此操作。功能。例如:
D = [];
for idx = 1:3
D = cat(2, D, foo.(abc1(1,idx)));
end
或者,如果您在创建 D 之前知道 D 的长度,则可以使用稍微更有效的版本:
D = zeros(1, num_elements);
ins_idx = 1;
for idx = 1:3
temp_num = length(foo.(abc1(1,idx)));
D(ins_idx:(ins_idx+temp_num-1)) = foo.(abc1(1,idx));
ins_idx = ins_idx + temp_num;
end
关于python - 如何告诉 MATLAB 我正在导入的数据是一系列向量,而不仅仅是一系列字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814211/