gpt4 book ai didi

python - 根据 numpy 数组的值更改其各个元素

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

我试图迭代 numpy 数组的每个元素并以半随机方式更改其值。原因是,我将该方法应用于不同的数组:我希望它们被更改,但我不希望它们以相同的方式更改。

这是我迄今为止尝试过的:

with np.nditer(smatrix, op_flags=['readwrite']) as it:
for element in it:
if element < 0:
element = element - uniform(0.1,0.2)
if 0 <= element < 0.05:
element = uniform(0.15,0.3)
elif 0.05 <= element < 1:
element = 0
elif 1 == element:
element = 1

另一种可能性:

for element in np.nditer(smatrix, op_flags=['readwrite']):
if element < 0:
element = element - uniform(0.1,0.2)
if 0 <= element < 0.05:
element = uniform(0.15,0.3)
elif 0.05 <= element < 1:
element = 0
elif 1 == element:
element = 1

但是,结果数组看起来与初始数组完全相同...

我对编程比较陌生,并且在这个问题上停留了很长一段时间。如果有人能给我一个如何解决这个问题的提示,最好是一个简短的解释,那就太好了。谢谢!!

最佳答案

如果您想对 numpy.array 的每个单元格应用转换,那么 numpy.vectorize 是正确的工具。首先,您需要函数,它将使用单个单元格的内容作为输入,该函数本身将被提供给向量化返回所需的值,请参阅代码:

import numpy as np
import random
def f(x):
if x < 0:
return x-random.uniform(0.1,0.2)
if 0 <= x < 0.05:
return random.uniform(0.15,0.3)
if 0.05 <= x < 1:
return 0.0
if x == 1:
return 1.0
return x
vf = np.vectorize(f)

data = np.array([-4.3,0.03,0.9,1.0,1.9])
altered_data = vf(data)

输出(对您来说可能有点不同,因为它是部分随机的):

[-4.48922564  0.19609667  0.          1.          1.9       ]

正如您所看到的,它对所有值都按预期工作。请注意,我添加了“对元素不执行任何操作”行为 (return x) 作为安全措施,以防元素大于 1

有关 numpy.vectorize 的更多信息,请阅读 documentation .

编辑:修复了评论中报告的问题,问题是f有时returned int有时float ,而它应该始终返回 float

关于python - 根据 numpy 数组的值更改其各个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905297/

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