当前位置: 首页 > 知识库问答 >
问题:

如何检查矩阵中的每个值是否介于R中其他两个矩阵中的相应值之间?

仲学真
2023-03-14

我有一个矩阵,我想和另外两个矩阵进行比较,看看我矩阵中的每个条目是包含在另外两个矩阵的值之内还是之外。例如,如果我的矩阵是:

> M
           [,1]       [,2]       [,3]
[1,] -0.1278982  0.4600544  1.3271033
[2,] -0.1079272  1.2196851 -0.5240536 
[3,]  0.9548449 -0.9979668 -0.6636296 

另外两个矩阵是L和U:

> L 
            [,1]      [,2]       [,3]
[1,] -0.49416022 1.0992247 -1.2834469
[2,]  0.35491793 0.2460946  1.1411529
[3,]  0.01755317 0.2469062  0.2843848

> U
            [,1]       [,2]        [,3]
[1,] -0.84996737  1.0036554 -0.04747612
[2,]  0.35396050 -0.4612527 -1.47341334
[3,] -0.07716839 -1.5921625  1.62187501

我想取M的每个条目,比较一下它是否包含在L和U对应条目的范围内。

例如,对于M[1,1],它在-0.49416022和-0.84996737的范围之外,所以我将给这个比较赋值0。另一方面,对于M[2,3],值是-0.5240536,因此在1.1411529和-1.47341334之间,因此这个比较得到一个值0。

最后,我想得到一个包含所有0和1的矩阵,表明M中的条目是否包含在L和U中的相应值内。例如,如果我们称此矩阵为M_比较,那么:

> M_comparisons
            [,1]      [,2]       [,3]
[1,]           0         0          0
[2,]           0         0          1
[3,]           0         1          0

有没有人知道我如何能在非常快的计算时间内完成大型矩阵的计算?谢谢

共有2个答案

韶镜
2023-03-14

或者另一种方式是

+(M > U & M < L)
段干英杰
2023-03-14

简单如:

(M > U & M < L)*1

#     [,1] [,2] [,3]
#[1,]    0    0    0
#[2,]    0    0    1
#[3,]    0    1    0

或者,正如鲁伊·巴拉达斯(Rui Barradas)所建议的那样(稍微快一点):

as.integer(M > U & M < L)
library(microbenchmark)

microbenchmark(
  (M > U & M < L)*1,
  as.integer(M > U & M < L)
)

#Unit: microseconds
#                      expr   min    lq    mean median     uq    max neval
#       (M > U & M < L) * 1 1.278 1.469 2.15965  1.640 1.8000 38.981   100
# as.integer(M > U & M < L) 1.042 1.212 1.59757  1.384 1.5375 12.008   100
M <- t(matrix(c(-0.1278982, 0.4600544, 1.3271033, 
                -0.1079272, 1.2196851, -0.5240536,
                 0.9548449, -0.9979668, -0.6636296), nrow = 3))
L <- t(matrix(c(-0.49416022, 1.0992247, -1.2834469, 
                 0.35491793, 0.2460946,  1.1411529, 
                 0.01755317, 0.2469062,  0.284384), nrow = 3))
U <- t(matrix(c(-0.84996737, 1.0036554, -0.04747612, 
                 0.35396050, -0.4612527, -1.47341334, 
                -0.07716839, -1.5921625, 1.6218750), nrow = 3))
 类似资料:
  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 我有一个矩阵就像 现在我想删除每列的3个最大值,这样我就有了一个包含7行的新矩阵 我尝试为每列创建向量,然后用 然后把向量放到一个新的矩阵中,但由于我的矩阵有时有很多列,我想找到一种更简单的方法<谢谢你的帮助

  • 问题内容: 我想检查numpy数组/矩阵的列中的所有值是否相同。我试图用的的ufunc ,但它似乎不是在所有情况下工作时: 为什么在第二种情况下中间的列也求和,而应该是? 谢谢你的帮助! 问题答案: 将每个值与第一行中的相应值进行比较: 如果该列中的所有值均为True,则该列共享一个公共值: 可以通过微观分析将其应用于以下情况时可以看到的问题: 前两项,并经过相等性测试,结果为: 现在,经过测试是

  • 假设我们有两个矩阵,即和,分别为和。 我们如何才能找到哪些行与行相同(反之亦然)? 优选的输出是矩阵,其行数等于矩阵和之间的标识行,两列,即第一列包含矩阵的行数,第二列包含矩阵的行数。

  • 我有30个矩阵(1446x1124),包含从0到99的值。我想有一个输出矩阵,具有相同的大小,并且在每个单元中包含该矩阵的一个元素(例如2)在30个输入矩阵上的输出频率(在0和1之间)。

  • 问题内容: 我必须计算矩阵(二维数组)中大于200的所有值。 我为此写下的代码是: 是一幅图像,我将其转换为矩阵,然后查找值。 我的问题是,有没有更简单的方法可以做到这一点? 问题答案: 该功能是您的朋友。因为它是为充分利用数组数据类型而实现的,所以对于大图像,您应该注意到与提供的纯python解决方案相比,速度有所提高。 直接使用numpy.where将产生一个布尔掩码,指示某些值是否符合您的条