【问题标题】:Why aren't elements evaluated correctly?为什么没有正确评估元素?
【发布时间】:2021-05-15 23:17:53
【问题描述】:

有人能解释一下为什么在我调用函数之后 y 的所有元素都为零吗?

import matplotlib.pyplot as plt
import numpy as np
def hilbertImpulseResponse(k):
     if k == 0: 
        return 0
     else: 
        return ((2/(np.pi*k)) * (np.sin((np.pi*k)/2)) * (np.sin((np.pi*k)/2)))
size = 5
n = np.arange(-size, size + 1)
y = np.arange(-size, size + 1)

for i in np.arange(-size, size + 1):
    y[i] = hilbertImpulseResponse(i)

print(y)

提前致谢

【问题讨论】:

    标签: python numpy signal-processing


    【解决方案1】:

    np.arangedtype 推断为np.int64。所以所有的价值观都被打破了!

    尝试指定dtype

    import matplotlib.pyplot as plt
    import numpy as np
    def hilbertImpulseResponse(k):
         if k == 0: 
            return 0
         else: 
            return ((2/(np.pi*k)) * (np.sin((np.pi*k)/2)) * (np.sin((np.pi*k)/2)))
    size = 5
    n = np.arange(-size, size + 1, dtype=np.float64)
    y = np.arange(-size, size + 1, dtype=np.float64)
    
    for i in np.arange(-size, size + 1):
        y[i] = hilbertImpulseResponse(i)
    
    print(y)
    

    【讨论】:

      【解决方案2】:

      你想在剩下的过程中如何使用y?将这些值存储在标准 Python dict 中可能会更好:

      import matplotlib.pyplot as plt
      import numpy as np
      def hilbertImpulseResponse(k):
           if k == 0: 
              return 0
           else: 
              return ((2/(np.pi*k)) * (np.sin((np.pi*k)/2)) * (np.sin((np.pi*k)/2)))
      size = 5
      
      y = {i:hilbertImpulseResponse(i) for i in range(-size, size + 1)}
      
      print(y)
      

      或者可能是双重的:

      y = [(i,hilbertImpulseResponse(i)) for i in range(-size, size + 1)]
      

      甚至在需要时生成 hilbertImpulseResponse 值。

      【讨论】:

      • 这并不能直接回答问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多