簡體   English   中英

復雜矩陣處理

[英]Complex matrix manipulation

我的數據看起來像這樣,X和Y是缺陷的中心。 我想在矩陣中分配缺陷。

defect_ID X Y X_range Y_range
1         2 3  5        0
2         7 12 1        2

我創建了一個僅帶0的矩陣200 * 200。 我想通過以下方式將1放入矩陣:

每個坐標XY將為1。例如,我們可以看到ID 1 ,該ID允許1進入我的坐標(2,3)單元格。 ID 2將允許1進入我的單元格(7,12)。

我已經用代碼完成了

img<-matrix(0,200,200)
img[cbind(data[,X],data[,Y])]<-1

現在,我想做一些棘手的事情。 我使用了一個definition_ID,並希望使用我的X_range和Y_range值將值1分配給該缺陷周圍的所有點。 對於1個缺陷,我們取中心(X,Y)並使用X和Y_range進行移動。

偽碼

for defect_ID 1
img[X,Y]<-1
img[X+ 1:X_range,Y]<-1
img[X,Y+1:Y_range]<-1


例如,如果我們查看ID 1,我想為(2,3),(3,3),(4,3),(5,3),(6,3),(7, 3)

如果我有X_range和Y_range> 1。 XY將為中心。 然后我只想一次朝一個方向移動。 例如對於ID 2我想為我的單元格(7,12),(8,12),(7,13),(7,14)分配1

img = matrix(0,20,15)
for (i in 1:nrow(data)){
  sx = data$X[i]:(data$X[i]+data$Y_range[i])
  sy = data$Y[i]:(data$Y[i]+data$X_range[i])

  img[sx,sy] = 1
}

這至少應該在第一部分起作用。 我對第二個不太清楚。 如果范圍是奇數怎么辦? 我應該選擇哪個方向?

這是一個選擇:

data <- tibble(defect_ID=c(1,2),X=c(2,7),Y=c(3,12),X_range=c(5,1),Y_range=c(0,2))

輸入數據:

> data
# A tibble: 2 x 5
  defect_ID     X     Y X_range Y_range
      <dbl> <dbl> <dbl>   <dbl>   <dbl>
1         1     2     3       5       0
2         2     7    12       1       2

創建矩陣:

data_mat <- matrix(0,200,200)

分配一個:

for (i in 1:2) { # Change this to the length of your dataset
  data_mat[data[[i,'X']]:data[[i,'X']]+data[[i,'X_range']],data[[i,'Y']]] <- 1
  data_mat[data[[i,'X']],data[[i,'Y']]:data[[i,'Y']]+data[[i,'Y_range']]] <- 1
}

輸出:

> data_mat[1:10,1:14]
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
 [1,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
 [2,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [3,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [4,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [5,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [6,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0
 [7,]    0    0    1    0    0    0    0    0    0     0     0     1     1     1
 [8,]    0    0    0    0    0    0    0    0    0     0     0     1     0     0
 [9,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0
[10,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM