首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Matlab迁移到Saddle:如何变异矩阵选择?

从Matlab迁移到Saddle:如何变异矩阵选择?
EN

Stack Overflow用户
提问于 2017-02-15 12:09:29
回答 1查看 51关注 0票数 2

我在Matlab中有下面的代码,它将子选择从一个矩阵复制到另一个矩阵,即它复制ij之间的行的一个片段。

代码语言:javascript
复制
 % matrices
 matrix1(i:j,:) = matrix2(i:j,:)

我也想使用斯卡拉鞍做同样的事情,所以我尝试:

代码语言:javascript
复制
 // matrices
 val matrix1 = Mat[Double](M, N)
 val matrix2 = Mat[Double](M, N)
 // ...
 // but none of these work
 matrix2.rowSlice(i, j) = matrix2.rowSlice(i, j)
 matrix2.rowSlice(i, j).toMat.toVec = matrix2.rowSlice(i, j).toMat.toVec

是否有办法使用向量子选择而不是使用索引迭代矩阵?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-15 12:47:58

好的,我找到了一种用于我的特定用例的方法,但是我认为推广它应该没有问题。首先,马鞍垫实例是不可变的,因此它需要一种完全不同的方法。第二,rowSlice虽然为Mat编译,但总是抛出一个异常,期望具有有效的索引--它只适用于Frame,而不适用于Mat,这可能是鞍库的一个缺陷。

我的新方法是将matrix2中的所有切片行收集到行序列中,然后从生成的行序列中立即构建matrix1作为一个新矩阵。最后,由于Mat构造函数需要一个列Vect序列,所以它也必须被转换:

代码语言:javascript
复制
var RowSeq: Seq[Vec[Double]] = Seq()
RowSeq ++= matrix2.row((i1 to j1).toArray).rows()
RowSeq ++= matrix2.row((i2 to j2).toArray).rows()
RowSeq ++= matrix2.row((i3 to j3).toArray).rows()
val matrix1 = Mat(RowSeq.toArray).T
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42249019

复制
相关文章

相似问题

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