MATLAB MATLAB: Sum & Remove Array Entries (0, 1 & >1)

AI Thread Summary
To manipulate a matrix containing values of 0, 1, and greater than 1, the main tasks include calculating various sums and removing specific entries. The goal is to remove entries greater than 1 until the count of 0s and 1s exceeds the count of values greater than 1. A proposed function iteratively removes the maximum value from the matrix until the desired condition is met, but concerns about the efficiency of using the max function are raised. An alternative method for removing values greater than 1 is suggested, which involves directly filtering the array. For summation tasks, using the find function helps identify and count entries greater than 1 efficiently. Overall, the discussion focuses on optimizing matrix manipulation and addressing performance issues in the provided code.
hoffmann
Messages
65
Reaction score
0
Hi,

How can I find the following from an array with entries of 0, 1, and >1:

Find the sum of all the entries in the matrix that are not equal to 0.
Find the sum of all the entries in the matrix.
Find the sum of all the zero and 1 entries in the matrix.
How to remove the entries in the matrix that are not equal to 0, one by one.

Thanks!
 
Physics news on Phys.org
I guess I can simplify my question:

I have a matrix A that contains values of 0, 1, and values that are greater than one. I need to remove the entries in the matrix that are greater than 1 until the number of values that are 0 and 1 outnumber the number of values that are greater than 1. Then I need to display the new matrix B that contains the result of the aforementioned operation.

Hope that helps and thanks in advance!
 
Alright, so I have this so far:

function[newInteractions]=prune(interactions)

while( sum(interactions(interactions~=0)) > sum(interactions(interactions<=1)) )

i=max(interactions);

interactions(i)=[];

end

newInteractions=interactions;

I have a feeling that this can be improved in terms of speed -- the max function seems to be very slow. Can this be improved?
 
Hi

If you array is something like:

A=[1 0 0 0 1 0 1 0 25 5 8 69 0 0 1 0 1 0 1 1 1 1 0 4 7 0 1]

A quick way to remove all the bumf greater than 1 in your array is:

A(A>1)=[];

______

For your summing problems try:

x=find(A>1) %This will return all the points greater than 1 in your data.
y=length(x) %This will give you a number corresponding to the number of successful finds.
 
Back
Top