我在Windows Server 2008上使用matlab R2010b,我似乎需要’-v7.3’来保存到hdf5文件中.没有选项,我得到“版本0x0100”,并选择,我得到“版本0x0200”.
a = rand(10,10,10) + 1i*rand(10,10,10);
a(10,10,10) % in my case, result is 0.8667 + 0.3673i
save('trial.mat', '-v7.3')
在Python端(在我的情况下在Linux下运行):使用视图将元组变为复杂值,然后使用实际值重复以检查排序是否正确:
import numpy as np
import h5py
f = h5py.File('trial.mat','r')
zz = f['a'].value.view(np.double).reshape((10,10,10,2))
zzj = zz[:,:,:,0] + 1j*zz[:,:,:,1]
zzk = f['a'].value.view(np.complex)
np.all(zzk == zzj) # result is "True"
zzj.shape # result is (10, 10, 10)
zzk[9,9,9].imag == f['a'][9,9,9][1] # result is "True"
zzk[9,9,9] # result is (0.8667498969993187+0.36728591513136899j) consistent with Matlab
我们看到:
> zzj和zzk具有正确排序为真实和图像的复杂值
> zzj和zzk中的相应条目与Matlab中的值匹配
我没有把时间与巨大的阵列进行比较,但我敢打赌将hdf5对象直接转换为复杂对象是最快的.