gpt4 book ai didi

python - 正确的Python方式: Work on original in for loop

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

我有一个 ndarray 'n_data' 的 float ,形状为 (N, 3)。我想迭代并更改“n_data”(不是副本)。我有以下代码,但感觉很脏:

    i = 0
for point in n_data:
point -= center

r = np.linalg.norm(point)
n_data[i] = point * (r ** gamma / r)

i += 1

我尝试使用 np.nditer,但对于每次迭代,它都会得到一个数字,而不是如上所述具有 shape(3,) 的 ndarray。

        for point in np.nditer(n_data, op_flags=['readwrite']):

point -= center

r = np.linalg.norm(point)
point = point * (r ** gamma / r)

预先感谢您的所有帮助!

最佳答案

NumPy 术语 的翻译的一个矢量化版本,并且看起来仍然足够接近原始代码,那就是使用 NumPy broadcasting并将可选参数 axis 参数与 np.linalg.norm 一起使用,如下所示 -

shifted = n_data - center
R = np.linalg.norm(shifted, axis=1, keepdims=1)
n_data = shifted * (R ** gamma / R)

希望这感觉不那么脏!

关于python - 正确的Python方式: Work on original in for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42763615/

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