手頭有 109 張頭部 CT 的斷層掃描圖片,我打算用這些圖片嘗試頭部的三維重建。基礎工作之一,就是要把這些圖片數據讀出來,組織成一個三維的數據結構(實際上是四維的,因為每個像素有 RGBA 四個通道)。
這個數據結構,自然是 numpy 的 ndarray 對象,讀取圖像文件我習慣使用 PIL。因此,需要導入兩個模塊:
import numpy as np from PIL import Image
- 1
- 2
接下來,我用一行代碼就把 109 張圖片讀到了一個 109x256x256x4 的 numpy 數組中,耗時 172 毫秒:
data = np . stack ( [ np . array ( Image . open ( 'head%d.png' % i ) ) for i in range ( 109 ) ] , axis = 0 )
- 1
通常,上面這一行代碼應該寫成這樣:
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 )
- 1
- 2
- 3
- 4
- 5
- 6
我把這些代碼寫成一行,卻毫無晦澀艱深之感,仍然像詩歌一樣優美、像自然語言一樣通俗!
那一刻,我腦洞大開,很想知道 python 高手們只用一行代碼都能干些什么?當然,限定條件是不能引用自定義的模塊,可以使用內置模塊或通用的第三方模塊。上網一搜,發現這個問題好像是 python 的專屬問題,其他語言很難用一行代碼做點什么。知乎上有一篇名為《一行 Python 能實現什么喪心病狂的功能?》的帖子,其鏡像貼只有 java 的和 js 的,點進去發現,和 python 的完全不是一個概念。
整理了一下知乎上這篇文章的內容,頗覺有趣,分享給大家。
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 ) ] ) )
- 1
2. 一行代碼打印迷宮
print ( '' . join ( __import__ ( 'random' ) . choice ( '\u2571\u2572' ) for i in range ( 50 * 24 ) ) )
- 1
3. 一行代碼表白愛情
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 ) ] ) )
- 1
4. 一行代碼打印小龜龜
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 ) ] ) )
- 1
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
