【问题标题】:numpy if A > Value, change B to constantnumpy 如果 A > 值,将 B 更改为常量
【发布时间】:2021-12-21 07:29:58
【问题描述】:

问题:

我有一个有两个数组的函数,但是如果输入数据和结果在一定的范围内,返回的值是一个常量:

def funcB(A, C1, C2):
    B = (0.381*A) + (0.05*(C1/C2)) - 0.15
    B[B > 1.0] = 1.0
    B[B < 0.5] = 0.5
    return B

上面B是结果,>1.0就是1,

我正在努力做的是添加一个条件,如果输入 A 3.3 结果 B 是 1.0

【问题讨论】:

  • 您可以使用numpy.where 查找A 满足某些条件的索引。由于AB 具有相同的形状,使用这些索引(掩码)您可以设置B 的值。
  • 你可以像上面那样做。 B[A &lt; 1.64] = 0.5,假设 A 和 B 的形状相同,并且没有广播恶作剧。
  • @Reti43 从定义B 的方式来看,很明显A 可以广播到B,所以这应该可以正常工作。
  • @SvenMarnach 如果C1C2 是常量,那当然。但以下不起作用。 A = np.ones((5,)); C1 = C2 = np.ones((3, 1)); B = A + C1 / C2; B[A &lt; 0.5]

标签: python numpy boolean


【解决方案1】:

Reti43 - 成功了!

解决方案很简单:

def FuncB(A, C1, C2):
B = ((0.381*A) + (0.05*(C1/C2)) - 0.15).reshape(A.shape)
B[B > 1.0] = 1.0
B[B < 0.5] = 0.5
B[A < 1.64] = 0.5
B[A > 3.3] = 1.0
return B

【讨论】:

  • 您还可以将布尔数组与按位或组合。 B[(B > 1.) | (A > 3.3)] = 1。顺便说一下,在不知道 C1 和 C2 取什么值的情况下,B 的元素可能小于 0.5,但 A 中的元素可能大于 3.3。在这种情况下,您将面临关于它最终应该取哪个值的竞争条件。
  • 不过,这对于其他东西来说真的很有用,所以谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 2012-09-03
  • 2023-04-03
  • 2021-03-14
  • 2019-06-02
  • 1970-01-01
  • 2019-02-03
  • 2022-10-01
相关资源
最近更新 更多