首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件地将向量乘以另一个r

有条件地将向量乘以另一个r
EN

Stack Overflow用户
提问于 2014-11-04 15:11:07
回答 3查看 187关注 0票数 2

我有以下向量

代码语言:javascript
复制
trans<- c(-2,3,10,-5,-2,56,0)

我想把每个元素乘以两个向量,这取决于初始值是正数还是负数。

代码语言:javascript
复制
negtrans<-c(1,2,3)
postrans<-c(4,5,6,7)

结果应该是这样-2 12 50 -10 -6 336 0

这里的关键是保持订单完好无损

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-04 15:16:41

一种方法是

代码语言:javascript
复制
unsplit(Map(`*`, split(trans, trans>=0), 
               list(negtrans, postrans)),trans>=0)
#[1]  -2  12  50 -10  -6 336   0
票数 6
EN

Stack Overflow用户

发布于 2014-11-04 15:20:03

只需根据需要将相应的条目与反式或postrans相乘即可。

代码语言:javascript
复制
i <- which(trans < 0)
trans[i] <- trans[i] * negtrans
trans[-i] <- trans[-i] * postrans

然而,如果I和否定反式的长度不匹配,你就会有问题。

票数 2
EN

Stack Overflow用户

发布于 2014-11-04 16:24:48

我喜欢阿克兰对形式的回答,但结果不太好。

编辑:这里有一个非常愚蠢的解决方案,本质上与konvas‘一样:

代码语言:javascript
复制
trans[trans<0]<-trans[trans<0]*negtrans
trans[trans>0]<-trans[trans>0]*postrans

下面是它的工作原理:

代码语言:javascript
复制
trans<-sample(-100:100,1e5,rep=TRUE)
negtrans<-1:1e3
postrans<-1e4:100e4

    Unit: microseconds
                              expr     min      lq  median      uq
   carl(trans, negtrans, postrans)   6.415   7.697   8.126  11.546
  akrun(trans, negtrans, postrans) 204.832 210.390 223.220 234.337
 konvas(trans, negtrans, postrans)   5.560   5.987   6.415  10.263
     max neval
  29.934     5
 376.308     5
  15.395     5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26738551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档