You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不浪费内存的情况下更改矩阵切片的维度?

大内存矩阵的低内存占用操作方案疑问

我有一个规模较大(例如千兆字节级)的数值矩阵。需要直接将其作为矩阵传入第三方包函数完成部分计算,同时在另一些计算场景中,需将矩阵的不同切片分别视为二维或三维数组(不同切片可使用不同维度)。我想知道如何以尽可能少的内存占用完成这两类操作。

以下是我用小矩阵(2×9)做的演示示例:

m <- matrix(sample(18,2*(1+2*2+2*2)),nrow=2,ncol=1+2*2+2*2)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,]    3   10   12    2    7   15    6    1    9
## [2,]    8    4   18   17   13   14   11   16    5

#### 直接将矩阵传入第三方函数计算
## some_result <- function_from_some_package(m)

#### 将切片重新视为二维矩阵并计算正态密度
somedata <- matrix(1:4, ncol=2) # 数据来自外部

values <- dnorm(somedata, mean=matrix(m[1,2:5],nrow=2,ncol=2), sd=matrix(m[1,6:9],nrow=2,ncol=2))
##            [,1]      [,2]
## [1,] 0.01978261 0.0242596
## [2,] 0.00951157 0.0303845

我通过修改切片维度的方式实现需求,但担心R会在内部创建两个新对象——分别对应matrix(m[1,2:5],nrow=2,ncol=2)和matrix(m[1,6:9],nrow=2,ncol=2),这在千兆字节级的场景下会造成大量内存浪费。

补充测试:用tracemem工具检测发现,切片被复制了两次——一次是生成dnorm的输入时,另一次是dnorm内部复制mean参数时。

内容的提问来源于stack exchange,提问作者pglpm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:31:06