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

在r中运行for循环时设置矩阵单元格的最小值和最大值

牟辰龙
2023-03-14

我在一个for循环中运行代码,对矩阵中的单个单元格进行一些简单的算术。矩阵的所有单元格都应该有0到1之间的值。矩阵中的值永远不应该变成负值或超过1。我无法使用传统的“最小”和“最大”限制设置来解决这个问题。

示例数据:

x<-1:5
y<-runif(length(x)*length(x),0,1)
M<-matrix(y, length(x), length(x))

例如,从每个单元格中减去0.01(在我的实际情况中,在循环的每次迭代中减去的0.01来自特定的单元格,而不是这里所写的每个单元格,但我认为这不应该影响如何设置最小/最大值?

for (i in 1:50){
M[,]<-M[,]-0.01
}

e、 g.或者如果向矩阵的每个单元格添加0.01:

for (i in 1:50){
M[,]<-M[,]+0.01
}

如果在循环之后返回矩阵,矩阵中的值将不会像我希望的那样包含在0和1范围内。我对如何做到这一点感到困惑。

如果我在做某件特定于矩阵中某个“单元”的事情,例如。

for (i in 1:100){
M[3,4]<-M[3,4]-0.01
}

这会改变设置最小/最大值的方式吗?

共有2个答案

葛晔
2023-03-14

剪辑功能怎么样

clip<-function(x, min=0, max=1) {
    x[x<min]<-min; 
    x[x>max]<-max; 
    x
}

这将设置所有值

 clip(M-.9)

添加也一样

 clip(M+.9)

还是你试图减去最小值的问题?当你做这样的事情时

for (i in 1:50){
    M[,]<-M[,]-0.01
}

循环中的语句每次都对向量的每个元素进行操作。所以你真的减去了0.5。这可能太多了。

冷吉星
2023-03-14

我认为有两种方法可以做到这一点:

运行循环并获得结果(超出范围),然后使用以下命令强制数据在最小/最大值范围内:

M[which(M<min)] = min
M[which(M>max)] = max

你可以把赋值函数修改为

for (i in 1:50){
    M[which(M<max)] <- M[which(M<max)]+0.01
}

对于添加案例和

for (i in 1:50){
    M[which(M>min)] <- M[which(M>min)]-0.01
}

对于减法的情况。

 类似资料:
  • 这个问题可能是封闭的,因为它听起来很模糊,但我真的问这个,因为我不知道或者我的数学背景不够。 我试图实现一个挑战,其中一部分挑战要求我计算矩阵的最小值和最大值。我对矩阵的实现及其操作没有任何问题,但是什么是矩阵的最小值和最大值?考虑到3x3矩阵是9个数中最小的数,最大的是最大的还是其他什么?

  • 我正在编写一个代码,用户会被问到:“有多少个标记?”然后他们输入他们提到的分数。然后,它打印出最大标记和最小标记。 我不是最擅长编码的,所以我没有方向去寻找循环中的最大值和最小值。我找到了他们能够输入标记的部分,但我不确定如何找到最大值和最小值。我查找了如何进行最大值和最小值,但它通常显示为在数组中查找最大值和最小值,这不是我想要做的。

  • 我实现了c程序,可以找到矩阵的元素:行的最大元素,同时列的最小元素,或行的-min元素,同时列的最大元素。例如,我们有数据。包含以下内容的txt文件: 4 7 8 9 10 6 5 4 11 5 0 1 12 4 2 7 13- 其中4是n-矩阵大小(4x4),7和10是这些数字。 下面是代码: 问题:我想知道我的代码是不是“脏”代码?因为我总是渴望让一切变得如此困难,只要有可能让它变得容易。是否

  • 具有以下矩阵: 我想只得到每行的最小范围在2到30之间的行。 每行的最小范围: 所以我们只得到[2]和[3] 每行的最大范围在0到160之间: 最后我们只得到满足这两个条件的[2]。你能提供一个R语言函数来生成这个结果吗? 问候迪米特里斯

  • 我有两个矩阵m1和m2: 乘法的结果是: 现在,我想让R给出相应乘法过程的最大值,而不是矩阵m3中的和积,例如: 我想得出以下矩阵: 如何做到这一点?

  • 我有几个维度的多维矩阵,其中中的每个元素都是一个单独的传感器输入,是时间。我想做的是只分析中每个元素在上的峰值,因此我将得到一个的二维矩阵,其中只包含最大值。 我知道有很多方法可以获得单个整体最大值,但是有没有一种方法可以将它与逐个元素的操作相结合,比如,这样它就可以通过检查每个单独的元素? 如果你能给我任何帮助,我将感激不尽,因为我现在真的被困住了。提前谢谢!