矩阵提取和分配数字或符号

发布于 2024-09-30 04:55:11 字数 1307 浏览 1 评论 0原文

我有大量的数据矩阵存储在 MATLAB M 文件中,我将

通过这个示例来解释我的问题:

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

值不会改变,它们是实验结果的值

)矩阵总是有 4 行和 6 列

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

第二个矩阵没有任何零列

第三个矩阵的最后 2 列为零

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

我的数据中的接下来的三个矩阵不必与上述三个矩阵具有相同的序列

在有或没有零列的情况下, 。另一点是

非零列总是在最后三列或两列或一列或者没有

零列。

因此,我从上面的矩阵中需要的是

仅将三个字母 x、y 和 z 或数字 5、6 和 7 分配给非零列,从

矩阵 1 的第一列开始,一直到最后一个矩阵的最后一列(不包括零列

意味着:上面的示例结果将是:

第一个矩阵:

第 1 列:5

第 2 列:6

第 3 列:7

第 4 列:5

第 5 列:6

第 6 列:排除且未编号,因为它是零列

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

下一个矩阵,因此:

第二个矩阵

Column 1: 7

Column 1: 5

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

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

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

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

输入列编号:

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

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

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

第二列:分配的数字 5 OR 6 OR 7 到该列,并确保它

在整个列中重复。

抱歉问了这个很长的问题,我也尽力总结并使其变得简单。

我感谢任何帮助和感谢。


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

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

这意味着,例如:

5:绿色

6:蓝色

7:红色

然后,继续上面的分析。只是,用这些单词替换数字,

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

很抱歉将我的问题放入答案框中,但我无法

对此问题发表评论。

I have huge data matrices stored in a MATLAB M-file and I will explain

my problem by this sample example:

I have three constant matrices (every matrix has its own values and these

values are not changed, they are values for experiment results)

Every matrix always has 4 rows and 6 columns

The last column of the 1st matrix is a zero column

The 2nd matrix does not have any zero column

The last 2 columns of the 3rd matrix are zeros

Actually, I have other matrices but the above are only samples, meaning

that the next three matrices in my data do not have to be in the same sequence of the

above three matrices in case of having or not having zero columns. Another point is

the non zero columns are always at the last three or two or one column or there is no

zero column.

So, what I need from the above matrices is assigning three letters x, y and z OR

numbers 5, 6 and 7 to the nonzero columns only, starting from the 1st column of

matrix 1 continuing to the last column of the last matrix excluding the zero columns

meaning that: the above example results will be:

1st matrix:

Column 1: 5

Column 2: 6

Column 3: 7

Column 4: 5

Column 5: 6

Column 6: excluded and not numbered since it is a zero column

Then it does not reset the counting, but it continuous labeling and jumps to the

next matrix, so:

2nd matrix

Column 1: 7

Column 1: 5

.

.

.

.

And so on continuing to the last matrix.

I am using the following command that appears in the Matlab window:

K=input('Enter the matrix number: 1 OR 2 OR 3')

Then, after entering the matrix number, the program asks the user to

enter the column number:

M=input('Enter the column number 1 OR 2 OR 3 OR 4 OR 5 OR 6')

Then, the result will be a matrix of two columns:

1st column: the column elements for the number entered

2nd column: the assigned number 5 OR 6 OR 7 to this column and for sure it is

repeated through the column.

Sorry for this long question and also I tried to summarize and make it simple as I can.

I appreciate any help and thanks.


Can I ask a question continuing to the above one ?

If someone wants to represents the numbers by text, is it possible?

this means, for example:

5 : green

6 : blue

7 : red

and then, continue as above analysis.Only, replacing the numbers by these words

so, the results in the 2nd column will be words other than numbers.

Sorry for putting my question in an answer box, but I couldn't comment

to this question..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素染倾城色 2024-10-07 04:55:11

我希望你将所有矩阵保存在一个变量中。它将允许您不必对不同的矩阵重复相同的命令或使用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)];

希望我没有做某个地方的错误。

它可能可以在不创建组合矩阵的情况下解决。但你的矩阵很小,不应该有任何内存或性能相关的问题。

I hope you keep all your matrices in one variable. It will allow you not to repeat the same commands for different matrices or to use eval.

Let's say you have 3 matrices:

% sample data
A1 = horzcat(rand(4,5),zeros(4,1));
A2 = rand(4,6);
A3 = horzcat(rand(4,4),zeros(4,2));

You can combine them as a cell array:

A = {A1,A2,A3};

or 3D array (since all matrices have the same size):

A = cat(3,A1,A2,A3);

Create combined matrix B with 4 rows and (6+6+6) columns

% combined matrix for cell array
B = cell2mat(A);

% or for 3D array
B = reshape(A,4,[]);

Then you can use the following code to repopulate B with 5 6 and 7:

% 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);

Split B back to original matrices:

% convert back to cell array
C = mat2cell(B,[],4, [6 6 6]);

% convert back to 3D array
C = reshape(B,4,6,[]);

Finally you can get 2-column output as

% cell arrays
result = [A{K}(:,M) C{K}(:,M)];

% 3D arrays
result = [A(:,M,K) C(:,M,K)];

If you don't need to repopulate original matrices you can get the result earlier:

% cell arrays
result = [A{K}(:,M) B(:,(K-1)*6+M)];

% 3D arrays
result = [A(:,M,K) B(:,(K-1)*6+M)];

Hope I didn't make a mistake somewhere.

It probably can be solved without creating combined matrix. But your matrices are small and there should not be any memory or performance related problems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文