排除间隔的端点

如何解决排除间隔的端点

我有一个二维网格,其间隔为Xleft = -1.5 Xright = 1.5,Ydown = -1.5 Yup = 1.5。 Nx和Ny是指示我想要多少间隔的变量。问题起源于一维,所以让我们去一维简化一下。

我的间隔是[-1.5,1.5],我们取N = 12。我的网格步长将为3/12 = 0.25。我想输出一个带有内部点的数组:(-1.5,1.5)。我使用以下功能。

用于2D

np.mgrid[intervalX,intervalY]

用于一维

np.mgrid[intervalX] = np.mgrid[start:stop:stepsize]

因为开始将是原义开始,而停止将是停止-dx。我将内部点的数组定义为:

LeftX  = -1.5
RightX =  1.5

Nx = 12 

x_int = RightX - LeftX #interval in the x-direction

dx = (RightX - LeftX)  / Nx #grid step in x-direction

matrix0 = np.mgrid[LeftX+dx:RightX:(x_int/Nx)]

预期的输出是:

[-1.25 -1.   -0.75 -0.5  -0.25  0.    0.25  0.5   0.75  1.    1.25]

大多数情况下它是正确的。

但是在某些情况下,使用特定的N,程序会执行一些意外的操作:

N = 9的输出:

[-1.16666667 -0.83333333 -0.5        -0.16666667  0.16666667  0.5
  0.83333333  1.16666667  1.5]

您看到数组中包含了右边界点。我希望最合适的1.5拥有相同的阵列。但这是不必要的。 N = 10或N = 22也会发生同样的情况。

  • 问题:为什么会这样?
  • 问题:如何更改我的代码,这样就不再发生了?

解决方法

这基本上是一个数字舍入误差。 Some more information

mgrid[start:end:step](或arange)内部发生的事情可以简化为以下形式:

def mgrid(start,end,step)
    a = [start]
    i = 1
    while start+i*step < end:
        a.append(start+i*step)
        i += 1
    return a

以您的数字为例并显示失败的地方:

LeftX = -1.5
RightX = 1.5
Nx = 9
dx = (RightX - LeftX) / Nx

#    start        + i * step
a8 = (LeftX + dx) + 8 * dx 
# 1.4999999999999998
a8 < RightX
# True

因此,a8在数值上比端点1.5稍小,因此被添加到间隔中。不过,由于它非常接近,因此显示为1.5

作为解决方案,您可以使用np.linspace()函数。 默认情况下,结果包括起点和终点,您可以仅使用元素x[1:-1],也可以移动起点和终点:

import numpy as np
x1 = np.linspace(LeftX,RigthX,Nx+1)x[1,:-1]
x2 = np.linspace(LeftX+dx,RightX-dx,Nx-1)

通过明确包括端点,您不必担心是否 由于舍入错误,检查start + i*step < end的最后一个index错误的结果。

或者,您可以使用一个小的epsilon,您知道它肯定小于步长,然后执行以下操作:

eps = 1e-10
np.mgrid[LeftX+dx:RightX-eps:dx]

通过减去此epsilon,您可以确保支票start + i*step < end总是能得到预期的结果。

,

对于非整数步,请使用 numpy linspace ,因为它可以更好地处理端点

np.linspace(LeftX,RightX,Nx,endpoint=False)

然后对于2D,您可以使用 numpy meshgrid

x= np.linspace(LeftX,endpoint=False)
y = np.linspace(LeftY,RightY,Ny,endpoint=False)
xv,yv = np.meshgrid(x,y)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-