python - 有没有一种好方法可以将某个非零值周围的数字列表/矩阵 'flip' ?

标签 python arrays numpy

我想“翻转”矩阵中的值,类似于 numpy.absolute() ,但是翻转矩阵中的平均值;有点像折叠。

下面的代码可以工作,但我理想地喜欢更Pythonic/更快的东西。就我的目的而言,我的数组是 360x360,这种“翻转”需要进行很多次,因此对数组中的每个元素运行“for”循环似乎是一个坏主意。

import numpy as np
arr = np.array([0,1,2,3,4])
avg = np.average(arr)
for i in range(len(arr)):
    x = arr[i]
    if x < avg:
        arr[i] = x + avg
print(arr)
>>> [2,3,2,3,4]

谢谢!

最佳答案

这是 numpy 的方式:

arr[arr < avg] += avg

表达式arr < avg创建一个用于选择 arr 中的元素的掩码小于avg .

arr[...]选择arr中的那些元素.

+= avg增加它们。

关于python - 有没有一种好方法可以将某个非零值周围的数字列表/矩阵 'flip' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57151420/

相关文章:

c++ - 是否可以在运行时修改 PYTHONPATH?

python - Sqlalchemy 以相同的顺序获得结果

python - 按组减少 Pandas 数据框

ruby - 一次更改数组的所有项目

python - 使用 numpy/python 将具有相同索引的值相加

python - 二维和一维 Numpy 数组的交集

python - 查找 Pandas 列子集中的最大值和第二个最大值之间的差异

python - 如何为给定 X、Y 坐标和时间的 2D 散点图设置动画,并带有出现和消失的点?

arrays - 如何将 int 添加到 slice

php - 我做了一个可怕的循环....请帮助修复我的逻辑