手头有 109 张头部 CT 的断层扫描图片,我打算用这些图片尝试头部的三维重建。基础工作之一,就是要把这些图片数据读出来,组织成一个三维的数据结构(实际上是四维的,因为每个像素有 RGBA 四个通道)。
这个数据结构,自然是 numpy 的 ndarray 对象,读取图像文件我习惯使用 PIL。因此,需要导入两个模块:
1
2
|
import numpy as np from PIL import Image |
接下来,我用一行代码就把 109 张图片读到了一个 109x256x256x4 的 numpy 数组中,耗时 172 毫秒:
1
|
data = np.stack([np.array(Image. open ( 'head%d.png' % i)) for i in range ( 109 )], axis = 0 ) |
通常,上面这一行代码应该写成这样:
1
2
3
4
5
6
|
data = list () for i in range ( 109 ): img = Image. open ( 'head%d.png' % i) img = np.array(img) data.append(img) data = np.stack(data, axis = 0 ) |
我把这些代码写成一行,却毫无晦涩艰深之感,仍然像诗歌一样优美、像自然语言一样通俗!
那一刻,我脑洞大开,很想知道 python 高手们只用一行代码都能干些什么?当然,限定条件是不能引用自定义的模块,可以使用内置模块或通用的第三方模块。上网一搜,发现这个问题好像是 python 的专属问题,其他语言很难用一行代码做点什么。知乎上有一篇名为《一行 Python 能实现什么丧心病狂的功能?》的帖子,其镜像贴只有 java 的和 js 的,点进去发现,和 python 的完全不是一个概念。
整理了一下知乎上这篇文章的内容,颇觉有趣,分享给大家。
1. 一行代码打印乘法口诀
1
|
print ( '\n' .join([ ' ' .join([ "%2s x%2s = %2s" % (j,i,i * j) for j in range ( 1 ,i + 1 )]) for i in range ( 1 , 10 )])) |
2. 一行代码打印迷宫
1
|
print (' '.join(__import__(' random ').choice(' \u2571\u2572') for i in range ( 50 * 24 ))) |
3. 一行代码表白爱情
1
|
print ( '\n' .join([' '.join([(' Love '[(x-y) % len(' Love ')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0else' ') for x in range ( - 30 , 30 )]) for y in range ( 30 , - 30 , - 1 )])) |
4. 一行代码打印小龟龟
1
|
print ( '\n' .join([' '.join([' * ' if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0 else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))<2 else ' ' for x in range ( - 80 , 20 )]) for y in range ( - 20 , 20 )])) |
你在 python 使用过程中用一行代码实现过哪些激动人心的功能呢?欢迎留言讨论。
原文链接:https://blog.csdn.net/xufive/article/details/96475103