<p>您可以使用numpy函数<a href="https://numpy.org/devdocs/reference/generated/numpy.unpackbits.html" rel="nofollow noreferrer">unpackbits</a>来处理位。对于numpy,我们更喜欢使用numpy方法和函数,而不是python for loop—通常更快。因此,您可以将每个数字解压到第三个轴,然后像<code>QAB[i, j][5] == '1'</code>这样的条件变为<code>result[bits[5]]</code>。我颠倒了elif子句的顺序,就好像你<code>QAB[i, j][6] == '1'</code>,然后它将其设置为<code>"Cloud"</code>,并且从不重写子句,所以如果我们运行每个条件,这个例子应该是最后一个重写的例子。另外,您的最后一个案例(如<code>QAB[i,j][0:1] == '11'</code>)从未触发,因为左侧的长度始终为1。所以我用你说的<code>QAB[i,j][0:2] == ...</code>来重写</p>
<pre><code>"""
>>> print(bits)
[[[False False False]
[False False True]]
<BLANKLINE>
[[False False False]
[False False True]]
<BLANKLINE>
[[False False False]
[False False True]]
<BLANKLINE>
[[False False False]
[False False True]]
<BLANKLINE>
[[False False False]
[False True True]]
<BLANKLINE>
[[False False False]
[False False True]]
<BLANKLINE>
[[False True True]
[ True False True]]
<BLANKLINE>
[[ True False True]
[ True True True]]]
>>> print(result)
[['Cirrus' 'Cloud' 'Cloud']
['Cloud' 'Cloud Shadow' 'OutOfSwath']]
>>> Cloud
3
"""
import numpy as np
QA = [[1, 2, 3], [3, 9, 255]]
bits = np.unpackbits(np.array(QA, dtype=np.uint8, ndmin=3), axis=0).astype(bool)
result = np.array([[""] * bits.shape[2] for _ in range(bits.shape[1])], dtype=object)
result[~bits[0] & ~bits[1]] = "Aerosol Climatology"
result[~bits[0] & bits[1]] = "Low Aerosol"
result[bits[0] & ~bits[1]] = "Avrg. Aerosol"
result[bits[0] & bits[1]] = "High Aerosol"
result[bits[2]] = "Water"
result[bits[3]] = "Snow/Ice"
result[bits[7]] = "Cirrus"
result[bits[5]] = "Adjacent Cloud"
result[bits[4]] = "Cloud Shadow"
result[bits[6]] = "Cloud"
result[bits.all(axis=0)] = "OutOfSwath"
Cloud = (result == "Cloud").sum()
Shadow = (result == "Cloud Shadow").sum()
AC = (result == "Adjacent Cloud").sum()
Cirrus = (result == "Cirrus").sum()
SnowC = (result == "Snow/Ice").sum()
WaterC = (result == "Water").sum()
</code></pre>