Mata 中的逻辑子集

Logical Subsetting in Mata

提问人:MinChul Park 提问时间:10/31/2023 最后编辑:Nick CoxMinChul Park 更新时间:10/31/2023 访问量:38

问:

在 Mata(Stata 中的矩阵语言)中,我试图找到逻辑子集或等效子集。

假设我们有一个矩阵:

clear all

version 18
mata: tmp = (-0.5, 1 \ 5, -5)

在这里,我想分别用 1 和 -1 替换正数和负数。(也就是说,在我的问题中,只有迹象很重要)

所以,我想要的结果是

       1    2
    +-----------+
  1 |  -1       |
  2 |   1   -1  |
    +-----------+

如果我使用的是 R,我可能会使用如下所示的逻辑子集:

tmp <- matrix(c(-0.5, 1, 5, -5), 2, 2, byrow = TRUE)

> tmp
     [,1] [,2]
[1,] -0.5    1
[2,]  1.0   -5

tmp[tmp > 0] <- 1
tmp[tmp < 0] <- -1

> tmp
     [,1] [,2]
[1,]   -1    1
[2,]    1   -1

但我找不到如何在马塔做同样的事情。

R 子集 stata

评论

0赞 Nick Cox 10/31/2023
永远不要 MATA,永远是 Mata 在写作或代码中。mata

答:

2赞 Nick Cox 10/31/2023 #1

这只是函数的一个案例。sign()

. mata
------------------------------------------------- mata (type end to exit) --------------------------------------------------------------
: tmp = (-0.5, 1 \ 5, -5)

: sign(tmp)
[symmetric]
        1    2
    +-----------+
  1 |  -1       |
  2 |   1   -1  |
    +-----------+

我不是 R 专家,但我有信心猜测 R 也有这样的功能,所以有一个同样直接的解决方案。

评论

0赞 Nick Cox 10/31/2023
我查了一下。 在 R 中被记录为向量的工作。它是否也适用于矩阵,或者如何将其应用于矩阵是 R 人员的问题。sign()
0赞 MinChul Park 10/31/2023
谢谢,我不知道那种功能。这正是我想做的!
1赞 jay.sf 11/1/2023
sign是矢量化的,适用于矩阵,例如。matrix(-2:2, 3, 5) |> sign()
0赞 Nick Cox 11/1/2023
@jay.sf 这很好听,并且与我答案中的猜测相符,但我没有从文档中推断出来。