[crossposted to numpy-discussion and mlabwrap-user]
Hi,
I wrote a little utility class in Matlab that inherits from double and overloads the display function so you can easily print matlab arrays of arbitrary dimension in Numpy format for easy copy and pasting.
I have to work a lot with other peoples code - and while mlabwrap and reading and writing is great, sometimes I find it easier and quicker just to copy and paste smaller arrays between interactive sessions.
Anyway you put it in your Matlab path then you can do x = rand(2,3,4,5); a = array(x)
You can specify the fprintf style format string either in the constructor or after: a = array(x,'%2.6f') a.format = '%2.2f'
eg:
x = rand(4,3,2); array(x)
ans =
array([[[2.071566461449581e-01, 3.501602151029837e-02], [1.589135260727248e-01, 3.766891927380323e-01], [8.757206127846399e-01, 7.259276565938600e-01]],
[[7.570839415557700e-01, 3.974969411279816e-02], [8.109207856487061e-01, 5.043242527988604e-01], [6.351863794630047e-01, 7.013280585980169e-01]],
[[8.863281096304466e-01, 9.885678912262633e-01], [4.765077527169480e-01, 7.634956792870943e-01], [9.728134909163066e-02, 4.588908258125032e-01]],
[[4.722298594969571e-01, 6.861815984603373e-01], [1.162875322461844e-01, 4.887479677951201e-02], [9.084394562396312e-01, 5.822948089552498e-01]]])
It's a while since I've tried to do anything like this in Matlab and I must admit I found it pretty painful, so I hope it can be useful to someone else!
I will try and do one for Python for copying and pasting to Matlab, but I'm expecting that to be a lot easier!
Cheers
Robin
[crossposted to numpy-discussion and mlabwrap-user]
Hi,
Please find attached Python code for the opposite direction - ie format Python arrays for copy and pasting into an interactive Matlab session.
It doesn't look as nice because newlines are row seperators in matlab so I put everything on one line. Also theres no way to input >2D arrays in Matlab that I know of without using reshape.
In [286]: from mmat import mmat In [289]: x = rand(4,2) In [290]: mmat(x,'%2.3f') [ 0.897 0.074 ; 0.005 0.174 ; 0.207 0.736 ; 0.453 0.111 ] In [287]: mmat(x,'%2.3f') reshape([ [ 0.405 0.361 0.609 ; 0.249 0.275 0.620 ; 0.740 0.754 0.699 ; 0.280 0.053 0.181 ] [ 0.796 0.114 0.720 ; 0.296 0.692 0.352 ; 0.218 0.894 0.818 ; 0.709 0.946 0.860 ] ],[ 4 3 2 ]) In [288]: mmat(x) reshape([ [ 4.046905655728e-01 3.605995195844e-01 6.089653771166e-01 ; 2.491999503702e-01 2.751880043180e-01 6.199629932480e-01 ; 7.401974485581e-01 7.537929345351e-01 6.991798908866e-01 ; 2.800494872019e-01 5.258468515210e-02 1.812706305994e-01 ] [ 7.957907133899e-01 1.144010574386e-01 7.203522053853e-01 ; 2.962977637560e-01 6.920657079182e-01 3.522371076632e-01 ; 2.181950954650e-01 8.936401263709e-01 8.177351741233e-01 ; 7.092517323839e-01 9.458774967489e-01 8.595104463863e-01 ] ],[ 4 3 2 ])
Hope someone else finds it useful.
Cheers
Robin
On Tue, May 12, 2009 at 2:12 PM, Robin robince@gmail.com wrote:
[crossposted to numpy-discussion and mlabwrap-user]
Hi,
I wrote a little utility class in Matlab that inherits from double and overloads the display function so you can easily print matlab arrays of arbitrary dimension in Numpy format for easy copy and pasting.
I have to work a lot with other peoples code - and while mlabwrap and reading and writing is great, sometimes I find it easier and quicker just to copy and paste smaller arrays between interactive sessions.
Anyway you put it in your Matlab path then you can do x = rand(2,3,4,5); a = array(x)
You can specify the fprintf style format string either in the constructor or after: a = array(x,'%2.6f') a.format = '%2.2f'
eg:
x = rand(4,3,2); array(x)
ans =
array([[[2.071566461449581e-01, 3.501602151029837e-02], [1.589135260727248e-01, 3.766891927380323e-01], [8.757206127846399e-01, 7.259276565938600e-01]],
[[7.570839415557700e-01, 3.974969411279816e-02], [8.109207856487061e-01, 5.043242527988604e-01], [6.351863794630047e-01, 7.013280585980169e-01]],
[[8.863281096304466e-01, 9.885678912262633e-01], [4.765077527169480e-01, 7.634956792870943e-01], [9.728134909163066e-02, 4.588908258125032e-01]],
[[4.722298594969571e-01, 6.861815984603373e-01], [1.162875322461844e-01, 4.887479677951201e-02], [9.084394562396312e-01, 5.822948089552498e-01]]])
It's a while since I've tried to do anything like this in Matlab and I must admit I found it pretty painful, so I hope it can be useful to someone else!
I will try and do one for Python for copying and pasting to Matlab, but I'm expecting that to be a lot easier!
Cheers
Robin
On Wed, May 13, 2009 at 12:39 PM, Robin robince@gmail.com wrote:
[crossposted to numpy-discussion and mlabwrap-user]
Hi,
Please find attached Python code for the opposite direction - ie format Python arrays for copy and pasting into an interactive Matlab session.
It doesn't look as nice because newlines are row seperators in matlab so I put everything on one line. Also theres no way to input >2D arrays in Matlab that I know of without using reshape.
You could use ``...`` as row continuation, and the matlab help mentions ``cat`` to build multi dimensional arrays. But cat seems to require nesting for more than 3 dimensions, so is not really an improvement to reshape.
C = cat(4, cat(3,[1,1;2,3],[1,2;3,3]),cat(3,[1,1;2,3],[1,2;3,3])); size(C)
ans = 2 2 2 2
Thanks, it will be useful.
Josef
In [286]: from mmat import mmat In [289]: x = rand(4,2) In [290]: mmat(x,'%2.3f') [ 0.897 0.074 ; 0.005 0.174 ; 0.207 0.736 ; 0.453 0.111 ] In [287]: mmat(x,'%2.3f') reshape([ [ 0.405 0.361 0.609 ; 0.249 0.275 0.620 ; 0.740 0.754 0.699 ; 0.280 0.053 0.181 ] [ 0.796 0.114 0.720 ; 0.296 0.692 0.352 ; 0.218 0.894 0.818 ; 0.709 0.946 0.860 ] ],[ 4 3 2 ]) In [288]: mmat(x) reshape([ [ 4.046905655728e-01 3.605995195844e-01 6.089653771166e-01 ; 2.491999503702e-01 2.751880043180e-01 6.199629932480e-01 ; 7.401974485581e-01 7.537929345351e-01 6.991798908866e-01 ; 2.800494872019e-01 5.258468515210e-02 1.812706305994e-01 ] [ 7.957907133899e-01 1.144010574386e-01 7.203522053853e-01 ; 2.962977637560e-01 6.920657079182e-01 3.522371076632e-01 ; 2.181950954650e-01 8.936401263709e-01 8.177351741233e-01 ; 7.092517323839e-01 9.458774967489e-01 8.595104463863e-01 ] ],[ 4 3 2 ])
Hope someone else finds it useful.
Cheers
Robin
On Tue, May 12, 2009 at 2:12 PM, Robin robince@gmail.com wrote:
[crossposted to numpy-discussion and mlabwrap-user]
Hi,
I wrote a little utility class in Matlab that inherits from double and overloads the display function so you can easily print matlab arrays of arbitrary dimension in Numpy format for easy copy and pasting.
I have to work a lot with other peoples code - and while mlabwrap and reading and writing is great, sometimes I find it easier and quicker just to copy and paste smaller arrays between interactive sessions.
Anyway you put it in your Matlab path then you can do x = rand(2,3,4,5); a = array(x)
You can specify the fprintf style format string either in the constructor or after: a = array(x,'%2.6f') a.format = '%2.2f'
eg:
x = rand(4,3,2); array(x)
ans =
array([[[2.071566461449581e-01, 3.501602151029837e-02], [1.589135260727248e-01, 3.766891927380323e-01], [8.757206127846399e-01, 7.259276565938600e-01]],
[[7.570839415557700e-01, 3.974969411279816e-02], [8.109207856487061e-01, 5.043242527988604e-01], [6.351863794630047e-01, 7.013280585980169e-01]],
[[8.863281096304466e-01, 9.885678912262633e-01], [4.765077527169480e-01, 7.634956792870943e-01], [9.728134909163066e-02, 4.588908258125032e-01]],
[[4.722298594969571e-01, 6.861815984603373e-01], [1.162875322461844e-01, 4.887479677951201e-02], [9.084394562396312e-01, 5.822948089552498e-01]]])
It's a while since I've tried to do anything like this in Matlab and I must admit I found it pretty painful, so I hope it can be useful to someone else!
I will try and do one for Python for copying and pasting to Matlab, but I'm expecting that to be a lot easier!
Cheers
Robin
Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion