Pythonic方法将多维复杂numpy数组打印到字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Pythonic方法将多维复杂numpy数组打印到字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2456字,纯文字阅读大概需要4分钟。
内容图文
![Pythonic方法将多维复杂numpy数组打印到字符串](/upload/InfoBanner/zyjiaocheng/793/fcfc54a1677942d3a27ec548e516d961.jpg)
我有一个像这样定义的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)]);
我的主要目标是与此格式兼容.
解决方法:
字符串连接通常使用join来完成:
s += str(a[i,j,k].imag) + ' '
可以替换为
s += ' '.join(str(a[i,j,k].imag))
全球应用,1-liner可以是:
s = ' '.join(' '.join(str(a[i,j,k].real) for j in range(a.shape[1]) for i in range(a.shape[0])) + ' ' + ' '.join(str(a[i,j,k].imag) for j in range(a.shape[1]) for i in range(a.shape[0])) for k in range(a.shape[2]))
不太清楚.我会保持for … k循环并以这种方式编写它:
s = ''
for k in range(a.shape[2]):
s += ' '.join(str(a[i,j,k].real) for j in range(a.shape[1]) for i in range(a.shape[0]))
s += ' '
s += ' '.join(str(a[i,j,k].imag) for j in range(a.shape[1]) for i in range(a.shape[0]))
s += ' '
编辑
这很重,numpy有很多工具.这是一个更简单的版本.
第一行重新格式化矩阵以简化第二行的工作:
b = [numpy.vstack((a.real.T[i], a.imag.T[i])) for i in range(a.shape[2])]
s = ' '.join(str(d) for x in b for d in x.flat)
编辑2
它仍然可以简化
' '.join([str(x) for x in np.hstack((a.T.real, a.T.imag)).flat])
内容总结
以上是互联网集市为您收集整理的Pythonic方法将多维复杂numpy数组打印到字符串全部内容,希望文章能够帮你解决Pythonic方法将多维复杂numpy数组打印到字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。