我有一个矩阵,我想和另外两个矩阵进行比较,看看我矩阵中的每个条目是包含在另外两个矩阵的值之内还是之外。例如,如果我的矩阵是:
> 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
有没有人知道我如何能在非常快的计算时间内完成大型矩阵的计算?谢谢
或者另一种方式是
+(M > U & M < L)
简单如:
(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将产生一个布尔掩码,指示某些值是否符合您的条