2015-07-10 3 views
-1

Проблемы:Сравнивая массив скалярного

Я хочу сравнить 2-мерный массив и переменный скалярный, как с числовыми значениями с (< =) lessthanorequalto операции и присвоить все эти значения в массиве к вектору.

Я хочу ускорить выполнение этой задачи в R.

Теперь, ниже приведен код, я использую (что, очевидно, довольно много времени)

код, я использую в настоящее время:

2d_examplearray; # Мой размер 2-мерного массива действительный размер 3500 X 4200 my_scalarvariable = 5; # какое-то произвольное значение, так как это пример

dims_2darray = dim (2d_examplearray); # Нет. строк & столбцов информация

# First create and then initialize vectors for storing values accordingly as specified in if # condition below 

eachelementin_ltvector<-vector(); 
eachelementin_gtvector<-vector(); 

eachelementin_ltvector=1; 
eachelementin_gtvector=1; 

for (eachrow in 1 : dims_2darray[1]) 
{ 
for (eachcol in 1 : dims_2darray[2]) 
{ 
if(2d_examplearray[eachrow,eachcol]<my_scalarvariable) 
{ 
vector_lessthanvalue[eachelementin_ltvector]=2d_examplearray[eachrow,eachcol]; 
eachelementin_ltvector=eachelementin_ltvector+1; 
} 
else # greater than or equal to my scalar variable then 
{ 
vector_greaterthanvalue[eachelementin_gtvector]=2d_examplearray[eachrow,eachcol]; 
eachelementin_gtvector=eachelementin_gtvector+1; 
} 
} 
} 

Спасибо за входы на мой предыдущий пост по поводу того же вопроса. Я новичок в R и этом Q & Форум.

Еще раз спасибо

+3

Пожалуйста, покажите небольшой пример и ожидаемый результат, основанный на этом. Для рекомендаций проверьте [здесь] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – akrun

+1

Вы пытались выполнить google 'R подмножество'? – nicola

+1

'indx <- yourmatrix <= scalarvariable; yourmatrix [indx] <- vector1' Но длины vector1 должны быть такими же, как длина 'yourmatrix'. Без воспроизводимого примера непросто скопировать код – akrun

ответ

0

Вы должны предоставить reproducible example, но ваше решение, вероятно, будет в форме

m= 3 # 3500 
n= 4 # 4200 
set.seed(123) 
m <- matrix(rnorm(m*n), m, n) 
m 
#   [,1]  [,2]  [,3]  [,4] 
# [1,] -0.5604756 0.07050839 0.4609162 -0.4456620 
# [2,] -0.2301775 0.12928774 -1.2650612 1.2240818 
# [3,] 1.5587083 1.71506499 -0.6868529 0.3598138 

v = 1.5 # the value you want elements less than or equal to 

m <= v 
#  [,1] [,2] [,3] [,4] 
# [1,] TRUE TRUE TRUE TRUE 
# [2,] TRUE TRUE TRUE TRUE 
# [3,] FALSE FALSE TRUE TRUE 

Но вы должны указать, как вы хотите, чтобы матрица для сопоставления с 12:58 Габаритные размеры.

Например, вы могли бы сделать

unlist(m[m <= v]) 

Который, как вы можете видеть, идет сверху вниз, слева направо.

# [1] -0.56047565 -0.23017749 0.07050839 0.12928774 0.46091621 -1.26506123 -0.68685285 -0.44566197 1.22408180 0.35981383 
+0

. Я начал делать этот комментарий, но мне нужен блок кода. – C8H10N4O2

0

Из вашего вопроса я не могу сказать, что это именно то, что вы ищете, но я создал пример, который мог бы быть полезным:

mat <- matrix(1:14700000, 3500, 4200) 

vector <- c(-1:-1000000) 
scalar <- 1000000 
mat[mat <= scalar] <- c(-1:-1000000) 

Обратите внимание, что vector должна быть одинаковой длиной заменяемые элементы.

+0

Спасибо всем за ваше время и ввод. Я новичок в программировании R и на этом форуме. – user2701513

0

«который» может быть полезным:

> A <- matrix(sample(3500*4200)/(3500*4200),3500,4200) 

> b <- 0.3 

> v <- A[which(A<=b)] 

> system.time(for (n in 1:100) { A[which(A<=b)] }) 
     User  System verstrichen 
     30.61  6.05  37.78 

> summary(v) 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
7.00e-08 7.50e-02 1.50e-01 1.50e-01 2.25e-01 3.00e-01 

> w <- unlist(A[A<=b]) 

> system.time(for (n in 1:100) { unlist(A[A<=b]) }) 
     User  System verstrichen 
     32.51  7.22  40.14 

> summary(w) 
    Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
7.00e-08 7.50e-02 1.50e-01 1.50e-01 2.25e-01 3.00e-01 

> identical (v,w) 
[1] TRUE 
Смежные вопросы