首页>>人工智能->pytorch报错记录:类型转换

pytorch报错记录:类型转换

时间:2023-11-29 本站 点击:1

出现问题

今天看代码的时候,有一段代码是随机初始化np.random.normal,看数据的时候看起来比较麻烦,所以我就手贱给改成np.arange了。然后就开始报错。


先看一下源代码长这样:

features=np.random.normal(size=(4,1))np.random.shuffle(features)poly_features=np.power(features,np.arange(5).reshape(1,-1))foriinrange(5):poly_features[:,i]/=math.gamma(i+1)

显示随机初始化feature,二维的,形状是4*1

将其随机打乱

poly_feature是存储feature从0次方到4次方

然后再将poly_feature每一项除以其阶乘,gamma(n)就是n-1的阶乘即(n-1)!


然后我开始改代码了。

features=np.arange(4).reshape(-1,1)poly_features=np.power(features,np.arange(5).reshape(1,-1))foriinrange(5):poly_features[:,i]/=math.gamma(i+1)

首先arange后边一定要加上.reshape(-1,1),就是转换成x*1维,x根据元素个数自动调整。

凑则会报错广播机制无法使用。

operands could not be broadcast together with shapes (4,) (1,5)

因为默认是一维的4元素,不是二维的4*1,所以无法使用广播机制。

因为是通过看数据来检查代码,所以我把随机打乱元素np.random.shuffle(features)这句删掉了。

之后是for i in range():这个循环会出现报错

原因是数据类型不相符,arrange生成的数组不是浮点数,而这需要浮点数。

TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'i') according to the casting rule ''same_kind'' 看样子是需要double但是生成的是int。

numpy数据类型转换

那怎么将其转换为浮点数。

poly_features = poly_features.astype(np.float32)

在poly_features后边加上上边这句。

或者为了省事可以直接用数乘进行强制类型转换,

比如poly_features = np.power(features, np.arange(5).reshape(1, -1))*1.0

但是不能改后边poly_features[:, i] = poly_features[:, i]*1.0/math.gamma(i + 1),改后边不生效的。虽然不会报错了,但还是结果数据还是int类型的。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/AI/1063.html