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

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