小编and*_*epd的帖子

为给定的基数和位数生成所有可能的排列

我敢肯定这很简单,但是我很想办法做到这一点。本质上,如果我有一个包含P个列和V ^ P行的数组,那么我该如何填充所有组合,也就是说,本质上是P位以V为底的所有可能数字。例如,对于P = 3和V = 2:

000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)

请记住,这是一个二维数组,而不是整数数组。

对于P = 4和V = 3。

0000
0001
0002
0010
0011
0012
....
Run Code Online (Sandbox Code Playgroud)

生成此数组后,我要开发的其余工作微不足道。因此,对如何执行此操作有一些代码/提示将不胜感激。谢谢。

combinations loops

5
推荐指数
1
解决办法
797
查看次数

跨MPI节点共享内存以防止不必要的复制

我有一个算法,在每次迭代中,每个节点都必须计算一个数组的一个部分,其中每个元素都x_依赖于所有元素x.

x_[i] = some_func(x) // each x_[i] depends on the entire x

也就是说,每次迭代都会x进行计算x_,这将是x下一次迭代的新迭代.

对此进行并列化的方法是MPI将x_在节点之间进行分割并Allgather在计算之后进行调用,x_以便每个处理器将其发送x_x所有其他处理器中的适当位置,然后重复.这是非常低效的,因为它Allgather每次迭代都需要昂贵的调用,更不用说它需要与x节点一样多的副本.

我想到了一种不需要复制的替代方法.如果程序在一台机器上运行,使用共享RAM,是否可以只x_在节点之间共享(不复制)?也就是说,在计算x_每个处理器之后会使其对其他节点可见,然后可以将其x用作下一次迭代的节点,而无需进行多次复制.我可以设计算法,以便没有处理器同时访问它x_,这就是为每个节点制作一个私有副本是过度的.

我想我要问的是:我可以简单地通过将数组标记为节点之间的共享来共享MPI中的内存,而不是手动为每个节点制作副本吗?(为简单起见假设我在一个CPU上运行)

c++ parallel-processing mpi

5
推荐指数
1
解决办法
903
查看次数

在C中编写一个仿函数

我想在C中做这样的事情:

typedef int (*func)(int);

func make_adder(int a) {
  int add(int x) {
    return a + x;
  }
  return &add;
}

int main() {
  func add_42 = make_adder(42);
  // add_42(10) == 52
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它可行吗?我的错误在哪里?

c functional-programming function functor

2
推荐指数
1
解决办法
875
查看次数

如何在python中按值分配

据我所知,由于Python的工作方式x = []; y = x; x.append(1); y会打印出来[1].但是,反过来说,

z = [1,2]
temp = z
temp[1] = 3
z,temp
Run Code Online (Sandbox Code Playgroud)

将打印([1,3],[1,3]).如果我理解正确的话,无论是ztemp指向同一个列表,这样一个变化将改变其他,看到列表是可变的.我怎样才能防止这种情况发生?也就是说,我想打一个for循环,将复制ztemp,改变它以不同的方式,并将其推入队列.为了工作,z必须始终包含基本数组,因此我需要更改temp不会更改z.

编辑:我尝试将z更改为元组z=z,,然后调用z[0]而不是z.这仍然没有解决我的问题.

python arrays list

1
推荐指数
2
解决办法
142
查看次数

python如何消除模块路径和成员函数之间的歧义

在 Python 中,点.用于写入模块的路径(例如path.to.mod.func()),但也用于选择成员函数(如果x是类型Tx.func()则是语法糖T.func(x)),据我所知。假设我有

# Module which contains a function `sort()`
import mod
# Object of `list` type, which contains `sort()` as a member functin
mod = [3,2,1]

x = mod.sort()  # Now what?
Run Code Online (Sandbox Code Playgroud)

最后一行会发生什么?如果以点分隔的标识符列表是:函数的模块/类路径,或者是(以点分隔的标识符)对象,然后是点,然后是该对象类中的成员函数,python 如何消除歧义?不知道我说清楚了没有。

在我看来,python 如何解析这样的表达式有点含糊不清。例如,诸如 C++ 或 rust(以及许多其他语言)之类的语言::用于分隔模块路径以及.分隔对象标识符和成员函数/成员变量。为什么 python 能够.明确地用于这两个目的?在 python 中会发生什么,为什么?

我希望我说清楚了。

python python-3.x

1
推荐指数
1
解决办法
73
查看次数

为什么这个正双的绝对值等于零?

我有一个功能工作vector <vector <double> >.在某些时候,我想在比较中使用元素的绝对值,并且我得到了错误的行为,所以我放入以下调试行:

std::cout << M[3][2] << " " << abs(M[3][2]) << "\n";
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,输出是:

0.667 0
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

c++ floating-point c-standard-library

0
推荐指数
1
解决办法
151
查看次数

在Gnuplot中,按标题名称进行绘图时,如何绘制两列的总和

我有以下数据文件:

denst densu densd denss
3     1     1     1
4     1     1.5   1.5
5     1     2.5   1.5
Run Code Online (Sandbox Code Playgroud)

我可以将densudenst)绘制为:

plot 'file.txt' u 'denst':'densu'

这是非常方便的语法。但是,如果我想绘制和的densu和的总和densd,就denst我能做到的唯一方法是:

set key autotitle columnhead 告诉gnuplot第一行是标题而不是数据

plot 'file.txt' u 1:($2+$3) 绘制

问题是我该如何使用这样的列值进行操作,但要使用名称符号?实际文件是一个具有约40列的csv,手动计数哪个列是哪个数字非常繁琐,因此我可以使用$n语法对列数据进行数学运算。

我想做类似的事情plot 'file.txt' u 1:($'densu'+$'densd'),使用标题名称语法类似于使用列号语法的方式。有什么办法吗?

plot gnuplot

0
推荐指数
1
解决办法
2592
查看次数