在稀疏矩阵的某些列中更改非零值

时间:2016-09-24 04:53:17

标签: arrays matlab matrix sparse-matrix

我在MATLAB中有一个稀疏矩阵:

N=1000;
P=0.01;
A=sprand(N,N,P);

我希望将某些列的所有非零条目更改为1。

就是这样:

c=randi(N,[1,round(N/10)]);
A(non zeros at columns c)=1;

当然它可以在for循环中完成,但这显然不是我正在寻找的解决方案。 我尝试了几种使用nnz,nonzeros,spfun的解决方案 - 但没有使用过。 任何人都可以想出一个简单的方法吗?

谢谢, ELAD

3 个答案:

答案 0 :(得分:1)

你可以试试这个

@ContentProvider(authority = AppDatabase.AUTHORITY,
        database = AppDatabase.class,
        baseContentUri = AppDatabase.BASE_CONTENT_URI)
@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {

    public static final String NAME = "AppDatabase"; // we will add the .db extension

    public static final int VERSION = 2;

    public static final String AUTHORITY = "com.hashx19.pristinekashmir.dbflowcontentprovider";

    public static final String BASE_CONTENT_URI = "content://"; }

答案 1 :(得分:1)

你可以这样做:

SCHED_BATCH

同样地,

SCHED_RESET_ON_FORK

A(:,c) = abs(sign(A(:,c))); % take the absolute value of the sign for all entries 
                            % in the submatrix defined by the columns in c, and 
                            % then assign the result back

这些可能不会很快,因为它们会处理这些列中的所有条目,而不仅仅是非零条目。 Dohyun's approach可能更快。

答案 2 :(得分:0)

Luis Mendos answer相关,但有点简单

A(:,c) = ceil(A(:,c));