3 回答
TA贡献1773条经验 获得超3个赞
设置
a = np.arange(25).reshape((5,5))
你可以用keepdims与mean:
a[a > a.mean(1, keepdims=True)] = 0
array([[ 0, 1, 2, 0, 0],
[ 5, 6, 7, 0, 0],
[10, 11, 12, 0, 0],
[15, 16, 17, 0, 0],
[20, 21, 22, 0, 0]])
使用keepdims=True, 给出以下结果mean:
array([[ 2.],
[ 7.],
[12.],
[17.],
[22.]])
文档中说明了这样做的好处:
如果将其设置为 True,则减少的轴将作为尺寸为 1 的维度保留在结果中。使用此选项,结果将针对输入数组正确广播。
TA贡献1783条经验 获得超4个赞
您可以使用np.mean(a, axis=1)来获取每行的平均值,将其广播到 的形状a,并将所有值设置a > broadcasted_mean_array为 0:
示例:
a = np.arange(25).reshape((5,5))
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
a[a > np.broadcast_to(np.mean(a,axis=1),a.shape).T] = 0
>>> a
array([[ 0, 1, 2, 0, 0],
[ 5, 6, 7, 0, 0],
[10, 11, 12, 0, 0],
[15, 16, 17, 0, 0],
[20, 21, 22, 0, 0]])
TA贡献1806条经验 获得超5个赞
使用axis关键字表示您的意思:
avg = np.mean(arr, axis=0)
然后使用它来创建您的掩码并分配您想要的值:
mask = avg>=arr
new_arr = np.zeros(arr.shape)
arr[mask] = 1
当然,您可以直接从掩码创建一个新数组,而无需两步方法。
添加回答
举报