我试图找到gcd以获得所需的数组长度。所以array_length = sub_array_length * number_sub_arrays。
我想要介于array_length和sub_array_length之间的gcd,以便我可以确定number_sub_arrays。
我正在使用高斯分布给我100个潜在的sub_array_lengths,希望其中的1个可以为我提供较大的GCD值。
到目前为止,这是我的代码(为清楚起见,我添加了lp_fill_size和pdx的值):
self.lp_fill_size = 7958
self.pdx = 8.296138303238362e-05
if self.lp_fill_size != 0:
dx_sub_arr_size = np.round(np.random.normal(0.01, 0.003, 100) / self.pdx)
num_sub_arr_gcd = np.gcd(dx_sub_arr_size, self.lp_fill_size)
我得到的错误是:
Traceback (most recent call last):
File "process_exp_nmr.py", line 157, in <module>
main()
File "process_exp_nmr.py", line 127, in main
dataFormatter.evaluateData()
File "/workspaces/NMars/NMars/DataStructures/MLFormatter/ExpMLFormatter.py", line 27, in evaluateData
self._evaluateProton()
File "/workspaces/NMars/NMars/DataStructures/MLFormatter/ExpMLFormatter.py", line 58, in _evaluateProton
num_sub_arr_gcd = np.gcd(dx_sub_arr_size, self.lp_fill_size)
numpy.core._exceptions.UFuncTypeError: ufunc 'gcd' did not contain a loop with signature matching types (dtype('float64'), dtype('float64')) -> dtype('float64')
以前类似的stackoverflow问题建议匹配数据类型。我尝试将两个参数的类型更改为np.float64,列表和整数。我不断收到相同的错误。我最初使用的是numpy 1.17,后来更新为颠簸的1.19.1(带有conda),仍然出现相同的错误。
我不知道该怎么办。任何帮助将不胜感激。
答案 0 :(得分:0)
这是使它起作用的python代码:
import numpy as np
lp_fill_size = 7958
pdx = 8.296138303238362e-05
if lp_fill_size != 0:
dx_sub_arr_size = np.round(np.random.normal(0.01, 0.003, 100) / pdx)
num_sub_arr_gcd = np.gcd(dx_sub_arr_size.astype(np.int32), lp_fill_size)
它可以转换为np.int32并使用常规的python int。