python - 如何告诉 MATLAB 我正在导入的数据是一系列向量,而不仅仅是一系列字母?

标签 python matlab matrix vector

我已经使用 python 为 MATLAB 中的项目获取了数据。我有 3 个不同的矩阵,尺寸分别为 mxn、mxn+1 和 mxn+2。我在 python scipy.io.savemat('set1.mat', mdict ={'abc1':abc1}) 中使用了此命令。矩阵的每一行实际上应该是一行行向量(长度为 p)而不是标量,因此矩阵实际上是 mx(n)*p, mx(n+1) *pmx(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/

相关文章:

python - 导入错误:无法导入名称 '_path' matplotlib

vector - 在 GNU Octave 中分割矩阵和向量以获取未提取的行

c - 用CUDA提取矩阵列?

python - 整数除法四舍五入

python - 任务 Celery 中的 RuntimeError : Never call result. get()

linux - Linux 上 Matlab 中的 24 位声音捕获

matlab - Matlab 中的标签和图例

使用 MAT2CELL 的 MATLAB

python - 在 SymPy 中从分块矩阵构建矩阵

python - 如何在 matplotlib 中的 Pandas 条形图上添加一条线?