用C语言生成稀疏矩阵

用C语言生成稀疏矩阵,c,random,sparse-matrix,C,Random,Sparse Matrix,除此之外,还有更简单的生成稀疏矩阵的方法吗 for (i = 0; i < 1000; i++) { if (rand() % 3 == 0) { array[i] = rand() % 3; } else { array[i] = ((rand() % 3) - 1); } } (i=0;i

除此之外,还有更简单的生成稀疏矩阵的方法吗

for (i = 0; i < 1000; i++)
{
    if (rand() % 3 == 0)
    {
        array[i] = rand() % 3;
    }
    else
    {
        array[i] = ((rand() % 3) - 1);
    }
}
(i=0;i<1000;i++)的

{
如果(rand()%3==0)
{
数组[i]=rand()%3;
}
其他的
{
数组[i]=((rand()%3)-1);
}
}
谢谢


我将数组用于表示目的

a一起使用
确定您希望它的稀疏程度

for (i = 0; i < 1000; i++)
{
    if (rand() % a == 0)
    {
        array[i] = rand() % 100;
    }
    else
    {
        array[i] = 0;
    }
}
(i=0;i<1000;i++)的

{
如果(rand()%a==0)
{
数组[i]=rand()%100;
}
其他的
{
数组[i]=0;
}
}

使用
a
确定您希望它的稀疏程度

for (i = 0; i < 1000; i++)
{
    if (rand() % a == 0)
    {
        array[i] = rand() % 100;
    }
    else
    {
        array[i] = 0;
    }
}
(i=0;i<1000;i++)的

{
如果(rand()%a==0)
{
数组[i]=rand()%100;
}
其他的
{
数组[i]=0;
}
}

使用
a
确定您希望它的稀疏程度

for (i = 0; i < 1000; i++)
{
    if (rand() % a == 0)
    {
        array[i] = rand() % 100;
    }
    else
    {
        array[i] = 0;
    }
}
(i=0;i<1000;i++)的

{
如果(rand()%a==0)
{
数组[i]=rand()%100;
}
其他的
{
数组[i]=0;
}
}

使用
a
确定您希望它的稀疏程度

for (i = 0; i < 1000; i++)
{
    if (rand() % a == 0)
    {
        array[i] = rand() % 100;
    }
    else
    {
        array[i] = 0;
    }
}
(i=0;i<1000;i++)的

{
如果(rand()%a==0)
{
数组[i]=rand()%100;
}
其他的
{
数组[i]=0;
}
}

t
为数组中非零元素的目标数量,该数量应远小于稀疏数组的长度。我假设您的数组的长度为
length
。我还生成了没有模算子的随机指数,以避免模偏差

for (i = 0; i < t; ++i) {
   int index = (int) (length * ((double) rand() / (RAND_MAX + 1.0)));
   array[index] = i % 2 ? -1 : 1;
}
在这两种情况下,我交替使用+/-1表示非零值,但如果您希望它更随机,则很容易替换
数组[index]
赋值的右侧


最后,如果我在C语法上弄错了什么,请原谅。My C大约生锈了15年,但是意图应该很清楚。

t
成为数组中非零元素的目标数量,它应该比稀疏数组的长度小得多。我假设您的数组的长度为
length
。我还生成了没有模算子的随机指数,以避免模偏差

for (i = 0; i < t; ++i) {
   int index = (int) (length * ((double) rand() / (RAND_MAX + 1.0)));
   array[index] = i % 2 ? -1 : 1;
}
在这两种情况下,我交替使用+/-1表示非零值,但如果您希望它更随机,则很容易替换
数组[index]
赋值的右侧


最后,如果我在C语法上弄错了什么,请原谅。My C大约生锈了15年,但是意图应该很清楚。

t
成为数组中非零元素的目标数量,它应该比稀疏数组的长度小得多。我假设您的数组的长度为
length
。我还生成了没有模算子的随机指数,以避免模偏差

for (i = 0; i < t; ++i) {
   int index = (int) (length * ((double) rand() / (RAND_MAX + 1.0)));
   array[index] = i % 2 ? -1 : 1;
}
在这两种情况下,我交替使用+/-1表示非零值,但如果您希望它更随机,则很容易替换
数组[index]
赋值的右侧


最后,如果我在C语法上弄错了什么,请原谅。My C大约生锈了15年,但是意图应该很清楚。

t
成为数组中非零元素的目标数量,它应该比稀疏数组的长度小得多。我假设您的数组的长度为
length
。我还生成了没有模算子的随机指数,以避免模偏差

for (i = 0; i < t; ++i) {
   int index = (int) (length * ((double) rand() / (RAND_MAX + 1.0)));
   array[index] = i % 2 ? -1 : 1;
}
在这两种情况下,我交替使用+/-1表示非零值,但如果您希望它更随机,则很容易替换
数组[index]
赋值的右侧



最后,如果我在C语法上弄错了什么,请原谅。我的C大约生锈了15年,但意图应该很清楚。

我觉得它不像矩阵或稀疏。你有一个向量(1D数组),其中大约三分之一的元素为零-这就是你真正想要实现的吗?正如我所说的,我使用数组来表示。不,我正在努力使它更稀疏,没有意大利面代码。所以我来这里寻求帮助我希望你意识到,在if/else子句中调用
rand()
会给你一个不同的随机数,而不是让你陷入这种情况的随机数?那怎么办:从零矩阵开始,给定稀疏度,生成随机的非零元素并对矩阵进行洗牌?@JosuéMolina保存洗牌,从零矩阵开始,将非零元素放入随机选择的位置,直到达到所需的稀疏度。我觉得它不像矩阵或稀疏。你有一个向量(1D数组),其中大约三分之一的元素为零-这就是你真正想要实现的吗?正如我所说的,我使用数组来表示。不,我正在努力使它更稀疏,没有意大利面代码。所以我来这里寻求帮助我希望你意识到,在if/else子句中调用
rand()
会给你一个不同的随机数,而不是让你陷入这种情况的随机数?那怎么办:从零矩阵开始,给定稀疏度,生成随机的非零元素并对矩阵进行洗牌?@JosuéMolina保存洗牌,从零矩阵开始,将非零元素放入随机选择的位置,直到达到所需的稀疏度。我觉得它不像矩阵或稀疏。你有一个向量(1D数组),其中大约三分之一的元素为零-这就是你真正想要实现的吗?正如我所说的,我使用数组来表示。不,我正在努力使它更稀疏,没有意大利面代码。所以我来这里寻求帮助我希望你意识到,在if/else子句中调用
rand()
会给你一个不同的随机数,而不是让你陷入这种情况的随机数?那怎么办:从零矩阵开始,给定稀疏度,生成随机的非零元素并对矩阵进行洗牌?@JosuéMolina保存洗牌,从零矩阵开始,将非零元素放入随机选择中