gpt4 book ai didi

r - 创建一个由 1 和零组成的矩阵以屏蔽 R 中的 Rayleigh-Tyndall 线

转载 作者:行者123 更新时间:2023-12-04 12:07:07 24 4
gpt4 key购买 nike

我正在做荧光光谱,然后用 R 处理文件。我想创建一个 1 和 0 的矩阵,这样我就可以从激发-发射矩阵 (EEM) 中屏蔽掉瑞利-廷德尔线。
EEM 有 44 列(激发)和 602 行(发射)。激发波长范围为 240 至 455 nm,步长为 5 nm。发射波长范围为 300 至 600.5,步长为 0.5 nm。得到的要屏蔽掉的矩阵应该是这样的(这只是屏蔽掉矩阵的一小部分。实际的矩阵大小为 44*602):

    240 245 250 ... 300 305 310 ... 455
300 1 1 1 ... 0 1 1 ... 1
300.5 1 1 1 ... 1 1 1 ... 1
...
305 1 1 1 ... 1 0 1 ... 1
...
310 1 1 1 ... 1 1 0 ... 1
...
480 0 1 1 ...
...
600 1 1 1 ... 0 1 1 ...
600.5 ...

当创建掩码矩阵(所需的矩阵)时,我想将它与实际的 EEM 值相乘。这样的事情应该可以解决问题:
corrected_EEM_Intensity <- Mask.Matrix * Sample_EEM

EEM 看起来像这样(44 列 * 602 行大小):
        240  245 ... 455
300 202.7 ...
300.5 190.5 ...
... .... ...
600 82.4 ...
600.5 45.9 ...

所以我想通过排放来划分激励,反之亦然。如果发射是激发的一个因素,反之亦然,矩阵中应该有一个 0。在其他情况下,应该是 1。

为了让事情变得更复杂,我想不仅针对相应的因素,而且在 10 nm 的范围内这样做。这意味着例如激发 430 除以发射 440,激发除以 450 也应该得到 0。

真正的屏蔽矩阵应该看起来像这样(作为简短的例子):
    240  ... 400 ... 455
300 1
300.5 1 ... 1 ... 1
... 1 1 1 1 1
...
390 1 1 0 1 1
... 1 1 0 1 1
400 1 1 0 1 1
...
600
600.5 1 1 1 1 1

我怎样才能做到这一点?

我希望我现在对这个问题更加清楚。

经过大量研究和一些自己的试验,我找不到答案。
非常感谢任何直接帮助或与其他网站/帖子的链接。

最佳答案

如果您要测试 a 是 b 的因子的对,反之亦然,您可以使用以下命令(编辑:现在将 <= 10 的模数视为零,即如果 a 在 10 的因子的 10 以内b,对应的矩阵单元设置为零):

cols <- seq(240, 455, 5)
rows <- seq(300, 600.5, 0.5)
# Create a two-column matrix containing all possible excitation-emission pairs.
d <- expand.grid(rows, cols, stringsAsFactors=FALSE)

# For each pair, test whether the smaller is a factor of the larger
# Set the number on the right hand side of the comparison (<=) to the
# maximum distance (from a true factor) within which numbers will be
# considered factors.
test <- apply(d, 1, function(x) max(x) %% min(x) <= 10)

# Create a matrix and populate with the (inverse) outcome of the test
res <- matrix(as.numeric(!test), ncol=44, nrow=602,
dimnames=list(rows, cols))

# Partial output
res[c('300', '300.5', '305', '310', '430', '480'),
c('240', '245', '250', '300', '305', '310', '440', '455')]
# 240 245 250 300 305 310 440 455
#300 1 1 1 0 0 0 1 1
#300.5 1 1 1 0 0 0 1 1
#305 1 1 1 0 0 0 1 1
#310 1 1 1 0 0 0 1 1
#430 1 1 1 1 1 1 0 1
#480 0 1 1 1 1 1 1 1

关于r - 创建一个由 1 和零组成的矩阵以屏蔽 R 中的 Rayleigh-Tyndall 线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com