How to remove columns from matrix?

조회 수: 1 (최근 30일)
Sahar abdalah
Sahar abdalah 2015년 4월 15일
편집: N/A 2015년 4월 16일
I have a matrix A and I want to remove from this matrix each column that contain the value -1.
A= [-1.192 -1.020 -1 -1.050 -1 -1 -1.070;
-1.213 -1.096 -1 -1.045 -1 -1 -1.102;
-1.036 -1.061 -1 -1.085 -1 -1 -1.137;
-1.176 -1.120 -1 -1.004 -1 -1 -1.115;
-1.124 -1.034 -1 -1.073 -1 -1 -1.134;
-1.202 -1.145 -1 -1.078 -1 -1 -1.057;
-1.127 -1.023 -1 -1.056 -1 -1 -1.066]
the size of A is 7*7 and I want to have a matrix 7*4 after removing colums? How can I do please?

채택된 답변

Star Strider
Star Strider 2015년 4월 15일
A more general solution:
A = reshape(A(~arrayfun(@isequal, A, -ones(size(A)))),size(A,1),[]);
It first finds a logical array of vectors that are equal to -1 using arrayfun, takes the values of the matrix that are not those values and creates a new vector from them. It then takes that vector and reshapes it to the row size of the original matrix to create the new ‘A’ matrix.
  댓글 수: 5
Star Strider
Star Strider 2015년 4월 15일
Did you try it yourself to see what it does? (My code does a version of what you intend with that.)
BTW, I always test my code to be sure it works before I post it (or clearly label it ‘untested code’ if I can’t). It saves time and enhances credibility.
pfb
pfb 2015년 4월 15일
I did test it. Here is what I get
>> A = [-1 2 -1 3 -1; 2 -1 -1 0 1];
>> A==-ones(size(A))
ans =
1 0 1 0 1
0 1 1 0 0
>> arrayfun(@isequal, A, -ones(size(A)))
ans =
1 0 1 0 1
0 1 1 0 0
It seems to me that they are equivalent, at least for this minimal example. I jotted down the matrix randomly, making sure that at least one column was composed of -1 alone. Maybe I was lucky. I have to admit I did not embark in systematic testing. Anyway, that is why I asked.

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

N/A
N/A 2015년 4월 15일
편집: N/A 2015년 4월 16일
% A(:, any(A == -1)) = [] %% Please try this.
% revised 'any' to 'all'. 'any' means the columns in which there is any '-1'; 'all'means the columns in which they are all '-1'.
A(:, all(A == -1)) = []
  댓글 수: 2
James Tursa
James Tursa 2015년 4월 15일
"all" instead of "any" to achieve the goal "... remove columns that entirely contain the value -1 ..."
N/A
N/A 2015년 4월 16일
편집: N/A 2015년 4월 16일
Yeah. Just a while after I shut down my PC last night, I realized it should be 'all'.
A(:, all(A == -1)) = []
Thanks!

댓글을 달려면 로그인하십시오.


pfb
pfb 2015년 4월 15일
편집: pfb 2015년 4월 15일
for that particular matrix you want
B = A(:, [1 2 4 7]);
If this is a more general problem, that's a bit more tricky. Should the column consist entirely of -1 or just one single -1 is sufficient for eliminating it?

Sahar abdalah
Sahar abdalah 2015년 4월 15일
My goal is to remove the columns that entirely contain the value -1. the problem is more general, I have a matrix A: size m * n with m number of test samples and n is the label of the class . The size of A in my case is 1000 * 1181. I want to remove the column and also their index.
  댓글 수: 3
Sahar abdalah
Sahar abdalah 2015년 4월 15일
yes it work but I want to remove the index also
Star Strider
Star Strider 2015년 4월 15일
What do you mean by ‘remove the index’? The resulting matrix will be smaller, so you will have to address its columns differently than you did in the original matrix. You will have to rewrite your code to do that.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by