数字区间的新值
New values for intervals of numbers
我有如下所示的 numpy 数组:
[2.20535093 2.44367784]
[7.20467093 1.54379728]
.
.
.
etc
我想获取每个数组并像这样转换它:
[1 1]
[2 0]
0 表示值低于 2。1 表示值介于 1 和 3 之间。2 表示它们高于 3。
我想为此在 python 中使用 switch case 函数。
这是我写到现在的内容:
def intervals(input):
match input:
case num if 0 <= num.all() < 2:
input = 0
case num if 2 <= num.all() < 3:
input = 1
case num if 3 <= num.all() <= math.inf:
input = 2
return input
但它似乎没有按预期工作。
不使用 switch case,你可以使用:
num = np.array([[2.20535093, 2.44367784],
[7.20467093, 1.54379728]])
print(num) # [[2.20535093 2.44367784], [7.20467093 1.54379728]]
num[num < 2] = 0
num[np.logical_and(num > 1, num < 3)] = 1
num[num > 3] = 2
print(num) # [[1 1], [2 0]]
您的前两个条件有冲突,因为一个值可能同时低于 2 并介于 1 和 3 之间。假设在这种情况下“低于 2”条件胜出,您的问题的单行解决方案可能像那样:
import numpy as np
arr = np.random.rand(5000000, 2)
new_arr = (arr > 2) + (arr > 3)
如果值高于 2
,则分配 +1
;如果值高于 3
,则分配 +1
(True
被转换为 int
求和)。
该方法也比其他提议的解决方案稍快,但可读性较差。
我有如下所示的 numpy 数组:
[2.20535093 2.44367784]
[7.20467093 1.54379728]
.
.
.
etc
我想获取每个数组并像这样转换它:
[1 1]
[2 0]
0 表示值低于 2。1 表示值介于 1 和 3 之间。2 表示它们高于 3。
我想为此在 python 中使用 switch case 函数。 这是我写到现在的内容:
def intervals(input):
match input:
case num if 0 <= num.all() < 2:
input = 0
case num if 2 <= num.all() < 3:
input = 1
case num if 3 <= num.all() <= math.inf:
input = 2
return input
但它似乎没有按预期工作。
不使用 switch case,你可以使用:
num = np.array([[2.20535093, 2.44367784],
[7.20467093, 1.54379728]])
print(num) # [[2.20535093 2.44367784], [7.20467093 1.54379728]]
num[num < 2] = 0
num[np.logical_and(num > 1, num < 3)] = 1
num[num > 3] = 2
print(num) # [[1 1], [2 0]]
您的前两个条件有冲突,因为一个值可能同时低于 2 并介于 1 和 3 之间。假设在这种情况下“低于 2”条件胜出,您的问题的单行解决方案可能像那样:
import numpy as np
arr = np.random.rand(5000000, 2)
new_arr = (arr > 2) + (arr > 3)
如果值高于 2
,则分配 +1
;如果值高于 3
,则分配 +1
(True
被转换为 int
求和)。
该方法也比其他提议的解决方案稍快,但可读性较差。