首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换浮点数中的小数

替换浮点数中的小数
EN

Stack Overflow用户
提问于 2022-05-26 20:04:13
回答 2查看 125关注 0票数 0

这个平台上的某个人已经有了帮助我生成以下代码

代码语言:javascript
复制
col,row = (100,1000) 
a = np.random.uniform(0,10,size=col*row).round(6).reshape(row,col)
mask = (a*1e6+1).astype(int)%10<2
a[mask] += 2e-6

这个代码确保最后一个小数点不是0或9。但是,我想在所有生成的小数中都没有0或9(这样就不可能有1.963749或3.459007)。

例如,将所有的0和9替换为2(考虑到上面的例子,分别为1.263742和3.452227 )是很好的。我知道替换函数(0,2)不适用于十进制数。是否有一种方法来替换这些数字,或者是否应该重写代码以使其工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-26 20:29:29

使用字符串的解决方案(我认为它不优雅,但很有效)。

假设这种输入是熊猫DataFrame df

代码语言:javascript
复制
       col1      col2
0  1.234567  9.999909
1  1.999999  0.120949

可以将其堆栈并替换为字符串:

代码语言:javascript
复制
def rand(x):
    import random
    return random.choice(list('12345678'))

df2 = (df
 .stack()
 .astype(str)
 .str.replace(r'[09](?!.*\.)', rand)
 .astype(float)
 .unstack()
 )

输出:

代码语言:javascript
复制
       col1      col2
0  1.234567  9.665236
1  1.184731  0.128345
票数 0
EN

Stack Overflow用户

发布于 2022-05-26 20:52:42

一种单独生成每个数字位置的备选方案(在网上试试!):

代码语言:javascript
复制
a = sum(np.random.randint(1, 9, (row, col)) * 10**e
        for e in range(-6, 1))

使用更多的NumPy (在网上试试!):

代码语言:javascript
复制
a = (np.random.randint(1, 9, (row, col, 7)) * [[10.**np.arange(-6, 1)]]).sum(2)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72397451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档