我想避免for此代碼段中的回圈:
import numpy as np
N = 4
a = np.random.randint(0, 256, size=(N, N, 3))
m = np.random.randint(0, 2, size=(N, N))
for i, d0 in enumerate(a):
for j, d1 in enumerate(d0):
if m[i, j]:
d1[2] = 42
這是一個簡化的示例,其中a是 N x N RGB 影像并且m是 N x N 掩碼,它設定第 3 通道的掩碼元素:a[:, :, 2]僅。
uj5u.com熱心網友回復:
您可以索引最后一個軸并設定布爾掩碼選擇的元素
import numpy as np
N = 4
a = np.random.randint(0, 256, size=(N, N, 3))
m = np.random.randint(0, 2, size=(N, N))
a[...,2][m.astype('bool')] = 42
a
輸出(對于 a 的隨機示例)
array([[[ 9, 13, 4],
[15, 0, 42],
[11, 12, 9],
[13, 0, 42]],
[[ 1, 10, 42],
[ 9, 0, 42],
[ 8, 6, 4],
[ 3, 0, 42]],
[[15, 11, 6],
[ 8, 11, 42],
[14, 1, 42],
[ 4, 14, 1]],
[[ 3, 6, 42],
[ 5, 13, 3],
[ 9, 14, 13],
[12, 6, 42]]])
uj5u.com熱心網友回復:
以下對我有用。
a[:,:,2] *= (1-m)
a[:,:,2] = m*42
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/441553.html
上一篇:如何獲得Python中的虛部?
下一篇:np.all如何與軸一起使用
