Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:建立积分矩阵的最快方法?

R:建立积分矩阵的最快方法?
EN

Stack Overflow用户
提问于 2020-04-23 10:46:42
回答 1查看 289关注 0票数 2

我有一个树参数函数f(x, y, z)和两个限制L, U.

给定一个向量v,我想用元素M[i, j] = INTEGRAL( f(x, v[i], v[j]) )建立一个矩阵,其中积分极限从x = Lx = U

所以这个问题有两个因素:

  1. ,我们需要能够计算积分。我不在乎这是怎么做的,只要它快速和合理准确。快,快,快!最快的方法是什么?

  1. ,我们需要设置矩阵M[i, j]。最快的路是什么?

请不要把这个问题写成"dO yOu WaNt GauSsIan QuaDraTure oR SimPsoNs ruLe?“。我不关心。速度是这里唯一相关的东西。只要积分至少精确到1-2位数或其他什么,我就接受它。

EN

回答 1

Stack Overflow用户

发布于 2020-04-23 12:16:25

可能最快的解决方案如下所示

代码语言:javascript
运行
AI代码解释
复制
library(pracma)
M <- matrix(0,nrow = length(v),ncol = length(v))
p <- sapply(seq(length(v)-1), function(k) integral(f,v[k],v[k+1]))
u <- unlist(sapply(rev(seq_along(p)), function(k) cumsum(tail(p,k))))
M[lower.tri(M)] <- u
M <- t(M-t(M))

关于执行部分所要求的两个要素

  • --我猜来自package pracmaintegral足够快的
  • 来构建矩阵M,我没有使用嵌套的for循环。这个想法在底线上得到了解释,我相信这会显著加快计算速度,

基准测试

我写下了一些可能的解决方案,您可以比较它们的性能(我的“最快”解决方案是在method1()中)。

代码语言:javascript
运行
AI代码解释
复制
set.seed(1)
library(pracma)

# dummy data: function f and vector v
f <- function(x) x**3 + cos(x**2)
v <- rnorm(500)

# my "fastest" solution
method1 <- function() {
  m1 <- matrix(0,nrow = length(v),ncol = length(v))
  p <- sapply(seq(length(v)-1), function(k) integral(f,v[k],v[k+1]))
  u <- unlist(sapply(rev(seq_along(p)), function(k) cumsum(tail(p,k))))
  m1[lower.tri(m1)] <- u
  t(m1-t(m1))
}

# faster than brute-force solution
method2 <- function() {
  m2 <- matrix(0,nrow = length(v),ncol = length(v))
  for (i in 1:(length(v)-1)) {
    for (j in i:length(v)) {
      m2[i,j] <- integral(f,v[i],v[j])
    }
  }
  m2 + t(m2)
}

# slowest, brute-force solution
method3 <- function() {
  m3 <- matrix(0,nrow = length(v),ncol = length(v))
  for (i in 1:length(v)) {
    for (j in 1:length(v)) {
      m3[i,j] <- integral(f,v[i],v[j])
    }
  }
  m3
}

# timing for compare
system.time(method1())
system.time(method2())
system.time(method3())

这样的话

代码语言:javascript
运行
AI代码解释
复制
> system.time(method1())
   user  system elapsed 
   0.17    0.01    0.19 

> system.time(method2())
   user  system elapsed 
  25.72    0.07   25.81 

> system.time(method3())
   user  system elapsed 
  41.84    0.03   41.89 

原则

method1()的思想是,您只需要计算v中由相邻点组成的区间的积分。请注意,积分属性:

  • integral(f,v[i],v[j])等于sum(integral(f,v[i],v[i+1]) + integral(f,v[i+1],v[i+1]) + ... + integral(f,v[j-1],v[j]))
  • integral(f,v[j],v[i])等于-integral(f,v[i],v[j])

从这个意义上说,给定n <- length(v),您只需要运行积分运算(与矩阵转置或向量累积求和相比,这是相当昂贵的) n-1时间(远远小于method2()中的choose(n,2)时间或method3()中的n**2时间,特别是当n很大时)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61394765

复制
相关文章
如何在附近商户中查找离你最近的商家?
根据用户当前位置和用户所选择范围, 在数据库中查询后将结果在数据库中排序或者在内存中排序, 返回给用户
天下之猴
2024/09/16
2440
如何精准地找到问题答案
搜索,是每个开发者必备功力。然而,在实际工作中,由于所用搜索引擎的限制,总是会遇到各种各样的坑。下面罗列几个,看看你是否遇到过。
老齐
2020/05/14
6980
自学java,如何快速地找到工作
    本人最近一直在帮零基础的java开发者提升能力和找工作,在这个过程中,发现零基础的java程序员,在自学和找工作时,普遍会出现一些问题,同时在实践过程中,也总结出了一些能帮零基础java开发尽快提升能力和尽快找工作的经验。在本文里,就将围绕零基础java开发自学和找工作这个过程,给出一些相关的建议。
用户1153489
2022/05/10
7940
如何在折线图上添加动画效果?
要在 Chart.js 的折线图上添加动画效果,可以使用 Chart.js 提供的配置选项来实现。以下是一个示例,展示了如何在折线图上添加简单的动画效果:
王小婷
2023/09/09
5190
如何在地图上寻找最密集点的位置?
  最近我在工作中遇到了一个小的需求点,大概是需要在地图上展示出一堆点中的点密度最密集的位置。最开始没想到好的方法,就使用了一个非常简单的策略——所有点的坐标求平均值,这个方法大部分的时候好用,因为大部分城市所有点位基本上都是围绕某个中心点向四周发散的。但我们实际在线上使用的时候,遇到了两个特殊的case。
xindoo
2024/08/07
1410
如何在地图上寻找最密集点的位置?
干货 | Siri 语音识别的小心机:你在哪里,就能更准确地识别那附近的地址
AI 科技评论按:这篇文章来自苹果机器学习日记(Apple Machine Learning Journal)。与其他科技巨头人工智能实验室博客的论文解读、技术成果分享不同,苹果的机器学习日记虽然也是介绍他们对机器学习相关技术的心得体会,但侧重点在于技术产品的实现过程、技术资源用户体验之间的取舍,更像是「产品经理的 AI app 研发日记」。过往内容可以参见 如何设计能在Apple Watch上实时运行的中文手写识别系统,苹果揭秘「Hey Siri」的开发细节,为了让iPhone实时运行人脸检测算法,苹果原来做了这么多努力。
AI科技评论
2018/09/21
2K0
干货 | Siri 语音识别的小心机:你在哪里,就能更准确地识别那附近的地址
超市里的潜规则,你被骗了吗?
都说买的没有卖的精,赚钱是人之常情。在琳琅满目的商品中,超市到底隐藏了多少秘密?今天就让我们一起揭秘超市中的潜规则,看看这些消费心理和商业秘密你懂多少?
用户1756920
2018/07/23
5230
超市里的潜规则,你被骗了吗?
谷歌自动驾驶项目开始帮助超市接送顾客
Alphabet(谷歌母公司)旗下的Waymo公司表示,该公司正开始尝试将沃尔玛超市的顾客接送到位于亚利桑那州菲尼克斯的沃尔玛门店。
人工智能快报
2018/08/17
3250
如何在 GitHub 上找到你要的代码?
你在 GitHub 上搜索代码时,是怎么样操作的呢?是不是就像这样,直接在搜索框里输入要检索的内容,然后不断在列表里翻页找自己需要的内容?
Crossin先生
2019/10/24
2K0
如何快准狠地找到相关领域的经典文献?
大多做科研的童鞋们大概都会遇到一个头疼的问题:怎么找文献?如何保证找到的文献都是相关领域的经典文献?之前我们有两篇推送:
生信宝典
2018/11/22
1.3K0
【周末漫谈】如何清晰地找到合适的数据挖掘算法?
再看看数据科学家应有的技术技能和领域: 继续一起看看数据分析师的选模思路: 数据科学应掌握的12种算法: 最后看一个数据挖掘大牛,用程序算法做人生选择
钱塘数据
2018/03/06
8000
【周末漫谈】如何清晰地找到合适的数据挖掘算法?
如何在Ubuntu上找到Redis日志
日志对于Redis安装的故障排除至关重要。你可能会问自己“我的Redis在哪里登录?” 或者“Redis在Ubuntu 14.04上存储日志文件的位置是什么?”
编程男孩
2018/09/27
5K0
Java校园超市系统超市商城源码超市网站
java使用ssm开发的校园超市系统,为方便学生网上购物,用户可以注册浏览商品,加入购物车或者直接下单购买,在个人中心管理收货地址和订单,管理员也就是商家登录后台可以发布商品,上下架商品,处理待发货订单等。
飞一样的编程
2023/01/10
1.7K0
Java校园超市系统超市商城源码超市网站
【门店小程序如何在附近】门店小程序怎么发布
随着小程序功能的逐步新增,小程序无疑成为今年移动互联网最大的热门。那么,如何注册、认证、绑定、关联小程序呢?
用户1745481
2019/01/08
2.8K0
Redis如何让你加到了附近的人
Redis3.2开始的Geo模块.可通过二维的经纬度表示.使用勾股定理算出元素之间的距离,通过矩形区域现定元素数量,然后按着距离排序。其次,交友软件中附近的人非常频繁,所以推出了Redis的地址位置距离排序算法GeoHash。
疯狂的KK
2020/10/27
8000
Redis如何让你加到了附近的人
【门店小程序如何在附近】门店小程序怎么发布
随着小程序功能的逐步新增,小程序无疑成为今年移动互联网最大的热门。那么,如何注册、认证、绑定、关联小程序呢?
用户1745481
2019/04/19
2.6K0
【门店小程序如何在附近】门店小程序怎么发布
如何在 GitHub 上找到免费且实用的软件?
今天稍微调整一下,分享 GitHub 上几个比较不错的项目合集,让你们可以在上面找到一些实用的软件。
GitHubDaily
2019/06/28
1.3K0
如何在 GitHub 上找到免费且实用的软件?
用K-Means、Foursquare和Folium聚集村庄,在大马尼拉寻找新鲜农产品供应商
作者 | Francesca Picache 编译 | VK 来源 | Towards Data Science
磐创AI
2021/04/21
1.2K0
用K-Means、Foursquare和Folium聚集村庄,在大马尼拉寻找新鲜农产品供应商
Java超市系统超市自提超市多商家系统源码超市自提网站
Ssm多商家超市自提系统。用户注册申请开店成为商家,普通注册用户下单时选择离自己较近的自提点次日取货。管理员进行店铺审核、用户、分类管理等。
飞一样的编程
2022/12/17
9530
如何在 Linux 下快速找到被删除的文件
日常运维过程中,我们经常需要处理磁盘空间问题,当接到告警后,第一时间会去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。
PHP开发工程师
2021/05/29
3.2K0

相似问题

在加载MySQL数据库时遇到问题

12

加载MNIST数据库时遇到问题

11

在将数据加载到数据库时遇到问题

15

从数据库加载数据时遇到问题

20

代码点火器->在加载多个库/类时遇到问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档