classdef
matpy
properties
end
methods
(Static)
function
result = mat2nparray( matarray )
data_size=size(matarray);
if
length(data_size)==1
result=py.numpy.array(matarray);
elseif
length(data_size)==2
transpose=matarray';
result=py.numpy.reshape(transpose(:)', int32(data_size));
else
transpose=permute(matarray,[length(data_size):-1:1]);
result=py.numpy.reshape(transpose(:)', int32(fliplr(size(transpose))));
end
end
function
result = nparray2mat( nparray )
data_size = cellfun(@int64,cell(nparray.shape));
if
length(data_size)==1
result=double(py.array.array(
'd'
, py.numpy.nditer(nparray)));
elseif
length(data_size)==2
result=reshape(double(py.array.array(
'd'
,
...
py.numpy.nditer(nparray, pyargs(
'order'
,
'F'
)))),
...
data_size);
else
result=double(py.array.array(
'd'
,
...
py.numpy.nditer(nparray, pyargs(
'order'
,
'C'
))));
result=reshape(result,fliplr(data_size));
result=permute(result,[length(data_size):-1:1]);
end
end
function
test()
A = 1:5;
Anp = matpy.mat2nparray(A);
sa = size(A);
sAnp = cellfun( @(x) double(x), cell(Anp.shape));
assert (all(sAnp == sa));
for
i1=1:size(A,1)
for
i2=1:size(A,2)
assert(A(i1,i2) == Anp.item(int32(i1-1), int32(i2-1)));
end
end
Anpm = matpy.nparray2mat(Anp);
assert(all(A == Anpm));
A = reshape(1:6, [2,3]);
Anp = matpy.mat2nparray(A);
sa = size(A);
sAnp = cellfun( @(x) double(x), cell(Anp.shape));
assert (all(sAnp == sa));
for
i1=1:size(A,1)
for
i2=1:size(A,2)
assert(A(i1,i2) == Anp.item(int32(i1-1), int32(i2-1)));
end
end
Anpm = matpy.nparray2mat(Anp);
assert(all(all(A == Anpm)));
A = reshape(1:(2*3*4), [2,3,4]);
Anp = matpy.mat2nparray(A);
sa = size(A);
sAnp = cellfun( @(x) double(x), cell(Anp.shape));
assert (all(sAnp == sa));
for
i1=1:size(A,1)
for
i2=1:size(A,2)
for
i3=1:size(A,3)
display(sprintf(
'%d %d %d -> %f %f'
, i1,i2,i3, A(i1,i2,i3), Anp.item(int32(i1-1), int32(i2-1), int32(i3-1))));
assert (A(i1,i2,i3) == Anp.item(int32(i1-1), int32(i2-1), int32(i3-1)))
end
end
end
Anpm = matpy.nparray2mat(Anp);
assert(all(all(all(A == Anpm))));
end
end
end