MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   矩阵提取和分配数字或符号 (https://www.labfans.com/bbs/showthread.php?t=24070)

poster 2019-12-10 20:48

矩阵提取和分配数字或符号
 
我在MATLAB M文件中存储了巨大的数据矩阵,我将说明

通过此示例示例遇到的问题:

我有三个常数矩阵(每个矩阵都有自己的值,这些值

值未更改,它们是实验结果的值)

每个矩阵总是有4行6列

第一个矩阵的最后一列是零列

第二矩阵没有任何零列

第三矩阵的最后2列为零

实际上,我还有其他矩阵,但以上只是示例,这意味着

我数据中的下三个矩阵不必与序列相同

在具有或不具有零列的情况下,三个矩阵以上。还有一点是

非零列始终位于最后三列或两列或一列,或者没有

零列。

因此,我需要从上述矩阵中分配三个字母x,y和z或

数字5、6和7只能从非零列开始,从第1列开始

矩阵1继续到最后一个矩阵的最后一列(不包括零列)

意思是:上面的示例结果将是:

第一个矩阵:

第1列:5

专栏2:6

专栏3:7

第4列:5

第5列:6

第6列:由于为零列,已排除且未编号

然后,它不会重置计数,而是连续标记并跳转到

下一个矩阵,所以:

第二矩阵

第1栏:7

第1列:5









依此类推,直到最后一个矩阵。

我正在使用Matlab窗口中出现的以下命令:

K = input('输入矩阵编号:1 OR 2 OR 3')

然后,在输入矩阵编号后,程序要求用户输入

输入列号:

M = input('输入列号1或2或3或4或5或6')

然后,结果将是两列的矩阵:

第一列:输入数字的列元素

第二列:为该列分配的数字5或6或7,并确定是

重复通过列。

很抱歉这个长问题,我也想尽我所能总结和简化。

感谢您的帮助和感谢。

我可以问一个继续上一个问题吗?

如果有人想用文本表示数字,那可能吗?

这意味着,例如:

5:绿色

6:蓝色

7:红色

然后,继续进行上述分析。仅用这些单词替换数字

因此,第二列中的结果将是数字以外的单词。

很抱歉将我的问题放在答案框中,但我无法发表评论

这个问题



[B]回答:[/B]

我希望您将所有矩阵都保留在一个变量中。这将使您不对不同的矩阵重复使用相同的命令或使用eval 。

假设您有3个矩阵:

% sample data A1 = horzcat(rand(4,5),zeros(4,1)); A2 = rand(4,6); A3 = horzcat(rand(4,4),zeros(4,2)); 您可以将它们组合为一个单元格数组:

A = {A1,A2,A3}; 或3D数组(因为所有矩阵的大小均相同):

A = cat(3,A1,A2,A3); 创建具有4行和(6 + 6 + 6)列的组合矩阵B

% combined matrix for cell array B = cell2mat(A); % or for 3D array B = reshape(A,4,[]); 然后,您可以使用以下代码用5 6和7重新填充B:

% repopulate B with 5, 6, 7 zerocolumns = all(B==0,1); % index of columns with all zeros vec567 = repmat(5:7,1,ceil(sum(~zerocolumns)/3)); % vector 5 6 7 5 6 7 ... B(:,~zerocolumns) = repmat(vec567(1:sum(~zerocolumns)),size(B,1),1); 将B拆分回原始矩阵:

% convert back to cell array C = mat2cell(B,[],4, [6 6 6]); % convert back to 3D array C = reshape(B,4,6,[]); 最后,您可以得到2列输出

% cell arrays result = [A{K}(:,M) C{K}(:,M)]; % 3D arrays result = [A(:,M,K) C(:,M,K)]; 如果您不需要重新填充原始矩阵,则可以更早地获得结果:

% cell arrays result = [A{K}(:,M) B(:,(K-1)*6+M)]; % 3D arrays result = [A(:,M,K) B(:,(K-1)*6+M)]; 希望我没有在某个地方犯错。

可能无需创建组合矩阵即可解决。但是您的矩阵很小,因此不应该有任何与内存或性能相关的问题。



[url=https://stackoverflow.com/questions/4065743]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:14

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.