具有不同colindices的矢量化

时间:2015-12-27 18:04:38

标签: r matrix

我想在一个简单的矩阵上执行一些操作,让我们说:

<android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:fitsSystemWindows="true"
            app:toolbarId="@+id/action_bar"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">


            <com.rbrlnx.cover.GroupSummaryCoverView
                    android:layout_below="@id/action_bar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/group_summary_cover_view"
                    app:layout_collapseMode="parallax"
                    app:layout_scrollFlags="scroll|exitUntilCollapsed"
                    android:fitsSystemWindows="true"/>

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <include layout="@layout/group_info_title_view"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/group_detail_components_lateral_margin"
                 android:layout_marginRight="@dimen/group_detail_components_lateral_margin"
                 android:layout_marginLeft="@dimen/group_detail_components_lateral_margin"/>

        <View android:id="@+id/name_setting_divider"
              android:layout_height="@dimen/space_medium"
              android:layout_width="match_parent"
              style="@style/group_detail_list_top_divider"/>

        <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/lv_participants"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
    </LinearLayout>

我想做的事情:在固定行的矩阵的某些值上添加一个数字(例如100)(即应该有固定的距离),但是会有所不同(即这里应该没有模式) )专栏。

例如,在进行一些修改后,请查看所需的输出:

aaa <- matrix(runif(200), ncol=5)
aaa

我还有一个要修改的列矩阵:

aaa[1:5, c(3,5)] <- aaa[1:5, c(3,5)] + 100
aaa[11:15, c(1,2)] <- aaa[11:15, c(1,2)] + 100
aaa[21:25, c(4,5)] <- aaa[21:25, c(4,5)] + 100
aaa[31:35, c(1,5)] <- aaa[31:35, c(1,5)] + 100
aaa

以及以下行索引向量

bbb <- matrix(cbind(c(3,5),c(1,2),c(4,5),c(1,5)), ncol = 4)

这可以通过使用循环来解决,但它也可以通过矢量化来解决吗?根据我的理解,这是不可能的,因为列是变化的。或者我错过了什么?

1 个答案:

答案 0 :(得分:2)

是的,可以使用以下形式的代码完成:

Mat[ cbind( rows, cols) ] <- vals

我认为你的期望并不重要:索引是正确的。你可以这样做:

Idx <- cbind( rep( 1:5, 2), rep( c(2,5), 5) )
aaa[Idx]<-aaa[Idx]+100

您可以构建来自&#39; bbb&#39;和&#c; ccc&#39;用:

cbind( ccc, # will get recycled
  c( apply(bbb,2, rep, each=5) ) )

然后:

Idx <- cbind( ccc, c( apply(bbb, 2, rep, each=5) ) )

aaa[ Idx] <- aaa[Idx]+100