如何操作大型数组 R
How to manipulate large arrays R
我有一个尺寸为 data[1:10,1:50,1:1000]
的大数组。我想用尺寸为 new_data[1,1:50,1:1000]
.
的新数据换出所有矩阵的第 5 行
到目前为止,我已经尝试将数组拆开并重新组合起来:
data1<-data[1:4,1:50,1:1000]
data2<-data[6:10,1:50,1:1000]
combined_data<-rbind(data1,new_data,data2)
但是 rbind
在这里似乎不合适 returns 一个大矩阵而不是一个大数组 dimensions[1:10,1:50,1:1000]
这里有一个简单的例子:
vec1<-1:4
vec2<-c(1,2,2,4,1,2,2,4)
data_array<-array(c(vec1,vec2),dim=c(4,3,10))
data_array[,,1] # visualizing one of the 10 matrix - say they error is in row 3 where we would expect all 3s
new_data<-array(c(3,3,3),dim=c(1,3,10))
new_data[,,1] # correct data that we want to swap into row 3 of all the matrices
array2<-data_array[1:2,,] #correct data from original array
array3<-array(data_array[4,,],dim=c(1,3,10)) #correct data from original array
combined_data <- rbind(array2,new_data,array3) # attempting to combine and new_data into the correct row
然而,这会产生尺寸为 [1:3,1:60] 的数据,我的目标是与原始 data_array 尺寸完全相同([1:4,1:3 ,1:10]) 但是 new_data 在每个矩阵的第 3 行交换
尝试使用“abind”包中的 abind。
library(abind)
array4 <- abind(array2,new_data,along=1)
final_data <- abind(array4,array3,along=1)
参考如下:
http://math.furman.edu/~dcs/courses/math47/R/library/abind/html/abind.html
由于数组实际上只是一个具有维度的向量,您可以从第三个值(您要替换的行)开始,每隔 4 个值(每层中的行数)替换为 new_data
data_array[seq(3, by=dim(data_array)[1], to=length(data_array))] <- new_data
data_array
#, , 1
#
# [,1] [,2] [,3]
#[1,] 1 1 1
#[2,] 2 2 2
#[3,] 3 3 3
#[4,] 4 4 4
#
#, , 2
#
# [,1] [,2] [,3]
#[1,] 1 1 1
#[2,] 2 2 2
#[3,] 3 3 3
#[4,] 4 4 4
#...
我有一个尺寸为 data[1:10,1:50,1:1000]
的大数组。我想用尺寸为 new_data[1,1:50,1:1000]
.
到目前为止,我已经尝试将数组拆开并重新组合起来:
data1<-data[1:4,1:50,1:1000]
data2<-data[6:10,1:50,1:1000]
combined_data<-rbind(data1,new_data,data2)
但是 rbind
在这里似乎不合适 returns 一个大矩阵而不是一个大数组 dimensions[1:10,1:50,1:1000]
这里有一个简单的例子:
vec1<-1:4
vec2<-c(1,2,2,4,1,2,2,4)
data_array<-array(c(vec1,vec2),dim=c(4,3,10))
data_array[,,1] # visualizing one of the 10 matrix - say they error is in row 3 where we would expect all 3s
new_data<-array(c(3,3,3),dim=c(1,3,10))
new_data[,,1] # correct data that we want to swap into row 3 of all the matrices
array2<-data_array[1:2,,] #correct data from original array
array3<-array(data_array[4,,],dim=c(1,3,10)) #correct data from original array
combined_data <- rbind(array2,new_data,array3) # attempting to combine and new_data into the correct row
然而,这会产生尺寸为 [1:3,1:60] 的数据,我的目标是与原始 data_array 尺寸完全相同([1:4,1:3 ,1:10]) 但是 new_data 在每个矩阵的第 3 行交换
尝试使用“abind”包中的 abind。
library(abind)
array4 <- abind(array2,new_data,along=1)
final_data <- abind(array4,array3,along=1)
参考如下:
http://math.furman.edu/~dcs/courses/math47/R/library/abind/html/abind.html
由于数组实际上只是一个具有维度的向量,您可以从第三个值(您要替换的行)开始,每隔 4 个值(每层中的行数)替换为 new_data
data_array[seq(3, by=dim(data_array)[1], to=length(data_array))] <- new_data
data_array
#, , 1
#
# [,1] [,2] [,3]
#[1,] 1 1 1
#[2,] 2 2 2
#[3,] 3 3 3
#[4,] 4 4 4
#
#, , 2
#
# [,1] [,2] [,3]
#[1,] 1 1 1
#[2,] 2 2 2
#[3,] 3 3 3
#[4,] 4 4 4
#...