Python中numpy.random.randn报错:float对象无法转为整数TypeError
嘿,这个问题我之前调试代码的时候也踩过坑!
错误原因拆解
你看到的TypeError: 'float' object cannot be interpreted as an integer,本质是因为在Python 3里,M/3(也就是30/3)会返回浮点数10.0,而np.random.randn()要求传入的维度参数必须是整数——它没法把10.0当成数组的行数来处理,所以直接报错了。
快速修复方案
把普通除法/换成整数除法//,这样得到的结果就是纯整数了,完全符合randn()的参数要求:
import numpy as np N = 4 M = 30 # Generar datos a partir de 3 clusters diferentes: X1 = 10 + 2*np.random.randn(M//3, N) X2 = -10 + 5*np.random.randn(M//3, N) X3 = 1*np.random.randn(M//3, N)
进阶优化(应对非3倍数的M)
如果之后你把M改成不是3的倍数的数(比如29),上面的写法会少生成样本。可以加个小处理,把余数补到最后一个聚类里,保证总样本数刚好是M:
import numpy as np N = 4 M = 29 # 比如改成非3倍数的数 base_size = M // 3 # 把多出来的样本数加到第三个聚类 cluster3_size = base_size + (M % 3) X1 = 10 + 2*np.random.randn(base_size, N) X2 = -10 + 5*np.random.randn(base_size, N) X3 = 1*np.random.randn(cluster3_size, N) # 验证总样本数:base_size + base_size + cluster3_size = M print(base_size + base_size + cluster3_size) # 输出29
内容的提问来源于stack exchange,提问作者AFS
相关产品推荐
相关产品推荐

