Is there a better way to print a section of a matrix? | Sololearn: Learn to code for FREE!
Novo curso! Todo programador deveria aprender IA generativa!
Experimente uma aula grƔtis
+ 1

Is there a better way to print a section of a matrix?

Apparently, I can specify the start/end of row & column to control which portion of the matrix I want to print, but is it the only way to do it in C#? Is there another way like slicing an array with [start:end] like we do in Python? https://sololearn.com/compiler-playground/ce3Kukv7MjjV/?ref=app

20th Mar 2024, 10:03 AM
Wong Hei Ming
Wong Hei Ming - avatar
12 Respostas
+ 3
Bob_Li Thanks for the examples. However, I'm working with an established matrix, not a 1d array. I'm starting to think why C# (so as Java) runs faster than Python. Put the interpretation thing aside, it looks like, "for loop" for example, C# has a production line with 3 already standing labors, initializer, stop controller and number manipulator (verbose code). And Python only as a range "manager", when the job comes he hires the labors he needs, thus taking some time (less verbose code).
20th Mar 2024, 2:15 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 3
Race condition ā“
20th Mar 2024, 2:41 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 2
Wong Hei Ming depending on the focus of what you are trying to achieve, you could get the same result by using Substring() without using the intermediate arr[] array. Lines 10 - 43 could be replaced by this: // print the entire matrix int n = 5; int m = 4; for (int i = 0; i<n; ++i) Console.WriteLine(up.Substring(i*m, m)); Console.WriteLine(); //print EFG int desire_row = 1; int start = 0; int end = 3; Console.WriteLine(up.Substring(desire_row*m + start, end - start)); Console.WriteLine();
20th Mar 2024, 2:19 PM
Brian
Brian - avatar
+ 2
Bob_Li this happens so frequently, when Sololearn delays showing first responses so multiple users respond with similar answers, there ought to be a name for it. I usually even refresh right before posting and still see no other answer. But after posting I see there were answers many minutes before!
20th Mar 2024, 2:35 PM
Brian
Brian - avatar
+ 2
Brian idea collision..šŸ˜ On the topic of not creating new arrays, Numpy's views is another good approach. Just create a matrix representation of the same underlying 1d data. It is more efficient than creating new 2d arrays. Btw, there is such a thing as NumSharp..I have not tried it and it's probably not avaiable in SL.
20th Mar 2024, 2:37 PM
Bob_Li
Bob_Li - avatar
+ 2
Brian, line 12-18 is used to create the matrix, and line 21-28 just prints the matrix so I can see it works correctly. We can comment-out line 21-28 and pretend there is an unknown size of 2d matrix. In this example, since we already know the matrix size ahead, try...catch is not used in here. To think in Python way, if it is a 2d list and I want to print EFG, or more precisely, the first 3 elements from row 1, I would simply write print(arr[1][:3]), that is the reason why line 33 exists. My concern is that do we necessarily need to manually declare the "desire_row", "start" and "end" variables to archive the same result as we do in Python.
20th Mar 2024, 2:41 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 2
Wong Hei Ming The choice of using a 2d array complicates things if you want to pick and print entire rows. Use a jagged array instead. You will have greater flexibility. I also discovered Index and Range types. Index: [^i ] is reverse or negative indexing. starts at the array end. Range: [i1..i2] is like Python's [i1 : i2]]. Notice 2 dots .. is used, so like a horizontal : šŸ˜…. https://sololearn.com/compiler-playground/cZo1npp3IQzB/?ref=app
21st Mar 2024, 4:54 AM
Bob_Li
Bob_Li - avatar
+ 2
It is a shame arr2[1][0..3] = "X"; (assign character X to column 0 to 2 in row 1) doesn't work. In the newer version of my greek pattern it draws continues lines only, thus arr[row][start:end] = "X" will come in handy if available. Guess another for loop is needed to get the job done.
21st Mar 2024, 6:11 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
compiled languages always have the speed advantage. If the compiler sees it fit, entire sections of your code might just be abstracted away completely. Brian yes, my thought exactly. Just display it as a matrix without actually creating one.
20th Mar 2024, 2:20 PM
Bob_Li
Bob_Li - avatar
+ 1
Bob_Li I'm asking because I want to port the greek pattern code into C#. Instead of accessing the elements, I fill in the elements, and they share the same concept. Only I need to implement my own np.rot90() in C# (also part of the practice).
20th Mar 2024, 3:04 PM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Wong Hei Ming yeah, it's not as powerful as Python 's slicing syntax. You can read it but cannot assign to it. C# have ArraySegment. You can modify the base array through it. But creating and using it is not as straight forward as Python slicing.
21st Mar 2024, 9:10 AM
Bob_Li
Bob_Li - avatar