[英]Numpy array condition and apply a formula
我有一个默认的 numpy 数组(速度、压力或温度数据),如下所示:
a=[[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
[30. 31. 32. 33. 34. 35. 36. 37. 38. 39.]
[40. 41. 42. 43. 44. 45. 46. 47. nan 49.]]
我需要应用以下条件,然后使用相应的公式
a<5 (a*5)+4
a>5 (a**2.)-2
我尝试使用:
a[a<5]=(a[a<5]*5.)+4.
但它不起作用,我还使用了创建布尔矩阵然后将它们乘以与条件对应的公式的方法,如下所示:
les=(a<5.).astype(float)
mayor=(a>5.).astype(float)
les=les*((a*5)+4)
mayor=mayor*((a**2.)-2)
b=les+mayor
这有效,但它使用了许多代码行,我认为这是不切实际的,我想知道是否有更简单的方法来做到这一点。
尝试使用嵌套列表理解
answer = [[(x*5)+4 if x<5 else (x**2.)-2 for x in row] for row in a]
这基本上将使用您定义的条件逐行为每一行创建一个新列表以转换每个元素
正如 hpaulj 在评论中所建议的,您可以使用 np.where:
>>> np.where(a<5, (a*5)+4, (a**2)-2)
array([[4., 9., 14., 19., 24., 23., 34., 47., 62., 79.],
[4., 9., 14., 19., 24., 23., 34., 47., 62., 79.],
[4., 9., 14., 19., 24., 23., 34., 47., 62., 79.],
[898., 959., 1022., 1087., 1154., 1223., 1294., 1367., 1442., 1519.],
[1598., 1679., 1762., 1847., 1934., 2023., 2114., 2207., nan, 2399.]])
但是,根据您提供的条件:
a<5: (a*5)+4
a>5: (a**2.)-2
对于a = 5
,值 5 应保持不变。 这是一种方法:
b = a.copy()
b[a<5] = a[a<5]*5 + 4
b[a>5] = a[a>5]**2 - 2
结果:
array([[4., 9., 14., 19., 24., 5., 34., 47., 62., 79.],
[4., 9., 14., 19., 24., 5., 34., 47., 62., 79.],
[4., 9., 14., 19., 24., 5., 34., 47., 62., 79.],
[898., 959., 1022., 1087., 1154., 1223., 1294., 1367., 1442., 1519.],
[1598., 1679., 1762., 1847., 1934., 2023., 2114., 2207., nan, 2399.]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.