我有一个像这样定义的 3D 复杂 numpy 数组:
> import numpy as np
> a = np.random.rand(2,3,4) + np.random.rand(2,3,4) * 1j
> a
array([[[ 0.40506245+0.68587874j, 0.74700976+0.73208816j,
0.42010818+0.31124884j, 0.27181199+0.54599156j],
[ 0.29457621+0.34057513j, 0.82490182+0.63943948j,
0.46887722+0.12734375j, 0.77184637+0.21522095j],
[ 0.67774944+0.8208908j , 0.41476702+0.85332392j,
0.10084665+0.56146324j, 0.71325041+0.77306548j]],
[[ 0.77843387+0.23660274j, 0.23671262+0.63997834j,
0.60831419+0.41741288j, 0.53870756+0.13747055j],
[ 0.12477767+0.54603678j, 0.60537090+0.89208227j,
0.16027151+0.17575777j, 0.18801875+0.27282324j],
[ 0.82308271+0.97238411j, 0.47458327+0.75200695j,
0.16085009+0.60620705j, 0.79766571+0.76470634j]]])
我需要将它打印 s
成特定格式的字符串,这有点像 MATLAB,我发现的最佳方法如下:(对我来说,描述格式的最佳方法是使用此代码)
> s = ''
> for k in range(a.shape[2]):
> for j in range(a.shape[1]):
> for i in range(a.shape[0]):
> s += str(a[i,j,k].real) + ' '
> for j in range(a.shape[1]):
> for i in range(a.shape[0]):
> s += str(a[i,j,k].imag) + ' '
我对这段看起来不太“pythonic”的代码不满意(我来自 C++,对 Python 不太了解)。我确信 Python 提供了一些可以在这里使用的好语法(例如列表推导),但我对它不是很熟悉。
因此,我的问题如下:如何改进此代码以使其更加 Pythonic?
编辑:这个 3D 数组被视为 2×3 复杂矩阵的数组。该格式包括打印第一个矩阵的实部,然后是虚部,然后以这种方式遍历每个矩阵。
这是您在 MATLAB 中运行此代码时获得的格式:
> a = rand(2,3,4) + rand(2,3,4) * 1i;
> s = sprintf('%g %g ', [real(a) imag(a)]);
我的主要目标是与这种格式兼容。