问题标签 [contiguous]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
449 浏览

python - 使 memoryview C-contiguous Fortran-contiguous

我在我的 Python 代码中使用 C 连续内存视图,我想使用dgemm需要 Fortran 连续内存视图的。我想使用在这里找到的函数PyMemoryView_GetContiguous但我不知道如何访问它。

有人知道我必须做什么进口吗?

我不想使用函数 copy_fortran() 因为它确实减慢了我的代码。

0 投票
1 回答
47 浏览

c++ - 在内存中连续分配的多维数组的实现

我希望能够在 c++ 中的堆上定义一个通用的多维数组,并且我想为数组分配一个连续的内存以快速访问元素(而不是锯齿状的向量向量)。这是我的实现

但是,我不喜欢访问数组的界面,例如

看起来很丑。

是否有可能以不同的方式实现这一点,以便以更自然的方式更好地访问元素,例如cout<<t(1,1,1);,而不是?

0 投票
1 回答
107 浏览

mpi - 行和列索引的 MPI 约定

我正在使用 MPI 来解决 PDE。为此,我将 2D 域分解为不同的单元格(每个单元格的大小为 " xcell,ycell"xcell = size_x_domain/(number of X subdomains)ycell = size_y_domain/(number of Y subdomains).

所以,我正在运行代码number of processes = (number of X subdomains)*(number of Y subdomains)

相对于顺序版本的好处是我在代表子域的每个进程之间进行通信。

下图说明了我对 8 个进程的细分(X 为 2 个子域,Y 为 4 个子域):

在此处输入图像描述

( xs,xe) 表示单元格的x_startx_end,( ys,ye) 表示单元格的y_starty_end

我想知道是否必须将i 索引设置为行索引,将j 设置为列x(i,j)索引?

将第一个索引放在 row 上,将第二个索引放在 column 上是一般规则吗?(例如,在 C、Fortran 和 Matlab 语言或更多语言中)

谢谢你的帮助。

0 投票
1 回答
2365 浏览

c++ - 为什么 std::vector没有.data()?

的特化std::vector<bool>,如 C++11 23.3.7/1 中所指定,不声明成员(例如,在此处此处data()提到)。

问题是:为什么 astd::vector<bool>没有.data()?这与为什么bools 的向量没有连续存储在内存中是同一个问题。不这样做有什么好处?

为什么不能返回指向 s 数组的指针bool

0 投票
1 回答
304 浏览

java - 我如何找到最大差异为 0 和 1 且时间 O(n) 和空间 O(1) 的最长子数组

如何找到最大差异为 0 和 1 且时间复杂度为 O(n) 且空间为 O(1) 的最长子数组?提前感谢您的反馈和解决方案!

例如:输入数组是 {3, 3, 4, 5, 5, 5, 6, 6, 7, 7, 7, 7, 7},输出应该是这样的:起始索引是 6,长度为 7。

另一个例子:输入数组是 {5, 5, 5, 5, 3, 3, 2, 2, 1},输出:索引 0 和长度 4。

可能的解决方案:我正在使用带有 var i 和 var j 的嵌套 for 循环

0 投票
1 回答
198 浏览

subset - Rcpp 子集连续 StringVector

下午好,

x[200:300]在使用 Rcpp 时,我一直在尝试使用与 R 中的子集类似的方法。(注意,这不是我要解决的问题,但我需要在我试图用 C++ 编写的函数中对许多范围进行子集化,我发现这是我性能的瓶颈)

然而,尽管我尝试过使用 rcpp 中的方法、使用迭代器或其他东西,但我似乎没有找到一个最低限度“快速”的解决方案。我发现的大多数解决方案都很慢。

并且查看 Rcpp 的参考,我似乎找不到任何东西,我在 StackExchange 中找不到它。

我知道这段代码现在很丑……但我一无所知

然后,它慢了 800 倍。我一直试图x[i:j]在 rcpp 基础中找到与 R 相同的功能,它非常快......但我找不到它。

结果给出

如果有人知道如何x[i:j]在 Rcpp 中快速访问子集功能或其他东西,我将不胜感激。我似乎无法找到我缺少的工具。

0 投票
0 回答
233 浏览

python - 加速 C 连续对齐阵列的 2D FFT(W)

我正在使用 pyFFTW 对 2D 复数数组进行 2D FFT。这些数组可能会变得非常大(~128 GiB),因此执行时间至关重要。(背景是光学物理学中的波前传播。)

看看下面的玩具代码:

在我的现代 64 位机器上执行 FFT 需要几秒钟。

分两步执行 2D FFT(所有列和所有行的 1D-FFT)时,结果和执行时间都保持不变:

但是,单独计算这些步骤的时间表明column-FFT 比 row-FFT 慢大约 10 倍

我想,原因是数组被逐行保存到物理 RAM 中。确实, a.flags 给出了

而 a.strides 给出

因此,该数组是 C 连续的,并且似乎正确对齐。但是,删除标志 'FFTW_UNALIGNED' 会使列 FFT 大约再慢 10 倍(而行 FFT 变得稍微快一些)。

因此,我的问题是:

对齐是否有问题,或者对于 C 连续数组的物理限制,对列的访问比对行的访问慢 10 倍?

编辑:确实,10 倍似乎太大了。让我们比较一下行和列的简单读/写访问:

将列与偶数索引相乘(第一个变体)比将行与偶数索引(第二个变体)相乘慢大约 2 倍。

编辑:在 ipython 中输入的确切代码是

0 投票
1 回答
590 浏览

fortran - 将非连续参数传递给 Fortran 过程中的连续虚拟数组

contiguous最近,我在处理具有带有属性的虚拟数组的子例程时遇到了 Fujitsu Fortran 2.0.0 版的意外行为。

我已将问题简化为一个简单的示例,如下所示:

这段代码可以由 gfortran (GNU Fortran (GCC) 6.3.0) 成功编译,但在使用 Fujitsu Fortran 编译器(如上所述)的集群上失败,并给出以下错误代码:

我很困惑,因为据我了解编译器应该在子例程的入口处创建一个连续的临时文件(例如这里所示:Fortran 2008 contiguous

其实我有两个问题:

  1. 这种情况的规范是什么?
  2. 它可以成为编译器强制他为这种情况创建一个连续临时的标志吗?

我正在尝试构建第三方软件,并且无法根据需要更改源。

0 投票
1 回答
99 浏览

sql - 当组在 MS SQL Server 中重复时,按组删除除第一个和最后一个值之外的所有值(连续)

我们有一个聊天系统,有时每秒会为聊天期间的每个事件生成多个事件日志。问题是这些会消耗大量数据存储(在该平台上非常昂贵),我们希望简化我们实际存储的内容并删除真正不需要的内容。

为此,对于聊天在队列中的位置有一个事件类型。只要他们不干预该聊天的事件,我们就不会关心每个职位。因此,我们希望只保留每个不同组中没有其他事件类型的第一个和最后一个,以获得该期间的“排队总时间”。

更复杂的是,客户在被部门转移时可以进出队列,因此 SAME CHAT 可以有多个这些队列位置记录的块。我已经尝试使用 FIRST_VALUE 和 LAST_VALUE 并且它让我大部分时间到达那里,但是当我们遇到这些事件的两个不同块的情况时失败了。

这是生成测试数据的脚本:

这是尝试识别其组的第一个和最后一个 id 的任何内容,该组按 name 字段排序并按transcriptid 分组:

问题是,它为整个组的所有它们提供了相同的第一个和最后一个 id,而不是将每组 Enqueue 记录视为一个不同的组。我如何将 Enqueue 的每个不同的分组实例视为一个唯一的组?

0 投票
3 回答
198 浏览

c++ - std::vector 迭代器类型和允许的操作

C++ 命名要求: ContiguousIterator将迭代器的类型std::vector称为连续。但是这里没有为类型连续迭代器提供定义。

std::vector::begin将迭代器类型称为随机访问迭代器。

这是否意味着连续迭代器属于随机访问类型?