Java 8, 100 bytes
The power of Lists and Streams! (and without the imports, to boot!)
Let's break this little lambda down into chunks:
We turn our List of Lists (the matrix in the question) into a Stream and go through each element, removing all of those pesky zeroes from each sub-List. We need to explicitly return the sublist each time here, because
Stream.map() converts each object in the Stream to whatever the mapping returns, and we don't want to change them.
We go through our newly de-zeroed sublists, and simply check how big they are next to each other, getting us the biggest sublist. The
.get() is because the
Stream.max() returns an Optional, requiring that extra function call.
We take that biggest sublist, and find where it is in the main List, giving us our result!
This breaks if the outer list is empty, but I'm taking
You may assume that there will only be one row with the most non-zero elements.
to imply that there will always be at least one row. Correct me if I'm wrong.