UFuncTypeError:ufunc'gcd'不包含签名匹配类型为(dtype('float64'),dtype('float64'))-> dtype('float64')的循环

时间:2020-09-01 22:48:21

标签: python-3.x numpy math

我试图找到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),仍然出现相同的错误。

我不知道该怎么办。任何帮助将不胜感激。

1 个答案:

答案 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。