gpt4 book ai didi

Python Numpy - 平方值问题

转载 作者:行者123 更新时间:2023-11-28 22:39:36 29 4
gpt4 key购买 nike

我试图对 numpy 数组中的所有元素求平方,但结果不是我所期望的(即有些是负数,没有一个是实际的平方值)。任何人都可以解释我做错了什么和/或发生了什么事吗?

import numpy as np
import math
f = 'file.bin'
frameNum = 25600
channelNum = 2640

data = np.fromfile(f,dtype=np.int16)
total = frameNum*channelNum*2
rs = data[:total].reshape(channelNum,-1) #reshaping the data a little. Omitting added values at the end.


I = rs[:,::2] # pull out every other column

print "Shape :", I.shape
print "I : ", I[1,:10]
print "I**2 : ", I[1,:10]**2
print "I*I : ",I[1,:10]* I[1,:10]
print "np.square : ",np.square(I[1,:10])
exit()

输出:

Shape : (2640L, 25600L)
I : [-5302 -5500 -5873 -5398 -5536 -6708 -6860 -6506 -6065 -6363]
I**2 : [ -3740 -27632 20193 -25116 -23552 -25968 4752 -8220 18529 -13479]
I*I : [ -3740 -27632 20193 -25116 -23552 -25968 4752 -8220 18529 -13479]
np.square : [ -3740 -27632 20193 -25116 -23552 -25968 4752 -8220 18529 -13479]

有什么建议吗?

最佳答案

这是因为 dtype=np.int16。您只允许 16 位来表示数字,并且 -5302**2 大于带符号的 16 位整数可以采用的最大值 (32767)。因此,您只能看到结果的最低 16 位,其中第一位被解释(或者,从您的角度来看,被误解)为符号位。

将您的数组转换为不同的 dtype - 例如

I = np.array( I, dtype=np.int32 )

I = np.array( I, dtype=np.float )

在执行可能超出范围的数值运算之前。

使用 dtype=np.int16,可以平方的最高整数为 +181 和 -181。 182 的平方大于 32767,因此溢出。即使使用 dtype=np.int32 表示法,您可以平方的最高整数为 +46340 和 -46340:46341 的平方溢出。

关于Python Numpy - 平方值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34598632/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com