我有一个二维数组。我想将每一行中大于该行平均值的所有值设置为 0。一些天真地执行此操作的代码是:
new_arr = arr.copy()
for i, row in enumerate(arr):
avg = np.mean(row)
for j, pixel in enumerate(row):
if pixel > avg:
new_arr[i,j] = 0
else:
new_arr[i,j] = 1
这很慢,我想知道是否有某种方法可以使用 Numpy 索引来做到这一点?如果它是整个矩阵的平均值,我可以简单地做:
mask = arr > np.mean(arr)
arr[mask] = 0
arr[np.logical_not(mask)] = 1
是否有某种方法可以使用一维平均值数组或类似的东西对每行平均值执行此操作?
编辑:建议的解决方案:
avg = np.mean(arr, axis=0)
mask = arr > avg
new_arr = np.zeros(arr.shape)
arr[mask] = 1
实际上使用的是列平均值,这对某些人也可能有用。它相当于:
new_arr = arr.copy()
for i, row in enumerate(arr.T):
avg = np.mean(row)
for j, pixel in enumerate(row):
if pixel > avg:
new_arr[j,i] = 0
else:
new_arr[j,i] = 1
慕容3067478
慕娘9325324
忽然笑
相关分类