我有一个带有shape(N,3)的浮点数的ndarray'n_data'。我想对“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
参数 with np.linalg.norm
,就像这样 -
shifted = n_data - center
R = np.linalg.norm(shifted, axis=1, keepdims=1)
n_data = shifted * (R ** gamma / R)
希望这感觉不那么脏!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句