Python中使用numpy构造向量时出现nan值该如何解决
问题根因
- 负数开平方默认在实数域运算不合法:
np.sqrt(-1)输入为整数时,numpy默认按实数域处理,直接返回nan,后续所有和它相乘的结果都会是nan。 - 维度长度获取错误:你的向量
y维度为(1,64)属于二维数组,len(y)只能获取第一个维度的长度1,无法得到你需要的64位序列长度。 range对象无法直接和numpy标量正确执行向量化运算,需要先转换为numpy数组。
解决方案
你要生成虚数系数的等差序列,直接用Python内置的虚数单位1j,同时改用np.arange生成对应长度的等差序列即可,两种可选写法如下:
# 写法1:通用适配任意维度的y,生成序列长度和y的总元素数一致 vec = np.pi * 1j * np.arange(y.size)
# 写法2:如果你确实需要序列长度匹配y的第二个维度(适配(1,64)这类二维结构) vec = np.pi * 1j * np.arange(y.shape[1])
如果你一定要用np.sqrt的方式生成虚数单位,给输入值补充复数标识即可:
vec = np.pi * np.sqrt(-1 + 0j) * np.arange(y.size)
内容的提问来源于stack exchange,提问作者Fatima_Ali
相关产品推荐
相关产品推荐

