gpt4 book ai didi

Python数组,有条件地改变分类元素

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:14 25 4
gpt4 key购买 nike

我有一个数组,想要使用另一个数组根据分类更改元素。

也就是说,我导入一个数组,然后如果 cell[i,j] 的值在一定限制内(比如 1 到 8 之间),则将 secondaryArray[i,j] 乘以 0.3,并将结果放入位置 [i,j] 处的输出数组

我有一些代码可以做到这一点(并且可能更清楚地解释了我的意思),但是它需要“非常”很长的时间(因为我的数组大约有 1000*1000 个元素),并且想知道是否有更有效的解决方案.

目前我有:

..
import numpy as np

def Factor_AM(cell):
if cell < 1 return 0.2;
elif cell < 8: return 0.3;
else: return 0.5;



mat = np.array(..some code to get an array from an external source..) //size 1000*1000
mat_out_1 = np.zeros_like(mat)
mat_out_1 = np.zeros_like(mat)

mat_ClassifyMe = np.array(..some code to import another 1000*1000 array with values in)

for index, x in np.ndenumerate(mat):
mat_out_1[index] = Factor_AM(x) * mat_ClassifyMe[index]
mat_out_2[index] = (1-Factor_AM(x)) * mat_ClassifyMe[index]

..some code to output mat_out_1 and mat_out_2

我看到了一些关于 np.where 和 np.argwhere 函数的文档,看起来很有希望,但考虑到我有超过 1 个测试(在上面的代码中我有 3 个,但实际上我有 12 个)我想不出一种无需做出非常难看的嵌套语句的方法。

是否有其他方法可以做到这一点,或者这是否与 Python 一样高效?

最佳答案

您可以使用Boolean or “mask” index arrays为此,例如:

import numpy as np

mat = np.arange(16.0).reshape((4,4))

mat_out = np.zeros_like(mat)

mat_out[mat < 6] = 0.2 * mat[mat < 6] # using a conditional for indexing
# or use a variable for the boolean 'masking' index array
mask1 = np.logical_and(mat >= 6, mat < 10)
mat_out[mask1] = 0.3 * mat[mask1]
mask2 = mat >= 10
mat_out[mask2] = 0.5 * mat[mask2]

print mat
print mat < 6
print mask1
print mat_out

关于Python数组,有条件地改变分类元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16437311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com