标签: contiguous

如何以及何时分配全局或静态数组的内存?

在c ++中定义全局或静态数组时,它的内存不会立即保留在程序的开头,而只会在我们写入数组时保留.我发现令人惊讶的是,如果我们只写入数组的一小部分,它仍然不会保留整个内存.考虑以下小例子,它稀疏地写入全局数组:

#include <cstdio>
#include <cstdlib>

#define MAX_SIZE 250000000
double global[MAX_SIZE];

int main(int argc, char** argv) {
   if(argc<2) {
      printf("usage: %s <step size>\n", argv[0]);
      exit(EXIT_FAILURE);
   }
   size_t   step_size=atoi(argv[1]);

   for(size_t i=0; i<MAX_SIZE; i+=step_size) {
      global[i]=(double) i;
   }

   printf("finished\n"); getchar();
   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

现在为不同的步长执行此操作并查看top的输出,我们得到例如:

./a.out 1000000
./a.out 100000
./a.out 10000
./a.out 1000
./a.out 100

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15718 user      20   0 1918m 1868  728 S    0  0.0   0:00.00 a.out
15748 user      20   0 …
Run Code Online (Sandbox Code Playgroud)

c++ arrays static global contiguous

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

在列表中查找连续数字组

这是一个重复的问题,除了对R,而不是Python的.

我想在列表中标识连续的组(有些人称它们是连续的)整数,其中重复的条目被视为在同一范围内存在.因此:

myfunc(c(2, 3, 4, 4, 5, 12, 13, 14, 15, 16, 17, 17, 20))
Run Code Online (Sandbox Code Playgroud)

收益:

min  max
2    5
12   17
20   20
Run Code Online (Sandbox Code Playgroud)

虽然任何输出格式都可以.我目前的蛮力,for-loop方法非常慢.

(如果我能轻易地重新解释Python的答案并且我是愚蠢的,那道歉!)

r list range contiguous

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

通过在 O(n) 或更短的时间内从列表中的任何索引开始,两只青蛙可以创建的最大距离?

我想知道是否可以在 O(n) 或更短的时间内完成这个挑战。描述如下:

青蛙跳

2 只青蛙可以从给定的 input_array 中的任何索引开始。该函数应该返回这些青蛙可以在它们之间创建的最大可能距离(两者的索引值之间的差异),让它们彼此跳得更远。

青蛙只能跳到更高值的元素或一些相同高度的元素上,它们不能跳过任何元素。

输入:[1, 5, 5, 2, 6]

输出:3。最大距离 3 是通过生成位置 3(0 索引)和左青蛙跳到索引 1 和右青蛙跳到索引 4 来创建的。

len(input_array) 介于 2 和 200 000 之间。数组中的值是介于 1 和 1 000 000 000 之间的整数。

实际上,这里的挑战似乎是找到最长的连续子序列,使其首先不增加,然后不减少(行为的变化点是开始索引)。这似乎是最高和子阵列任务的变体。

我最好的解决方案是 O(n log n) 通过迭代数组中的所有索引并携带一个max_value来检查两只青蛙可以从该迭代的索引跳多远。

这可以在 O(n) 或更少的时间复杂度内完成吗?


[解决] 谢谢大家的回复。这是一次性解决方案的 Python 实现:

def one_pass_solution(array: List[int]) -> int:
    current_peak_index = 0
    previous_peak_index = 0
    repeat_peaks = 0
    max_distance = 0
    is_going_up = False
    for i in range(len(array) - 1):
        this_height, next_height …
Run Code Online (Sandbox Code Playgroud)

python sub-array contiguous

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

现代 Fortran 中数组的连续性

我正在阅读《现代 Fortran 解释》(2018 年版)。p24上说:

大多数实现实际上按数组元素顺序将数组存储在连续存储中,但我们强调标准并不要求这样做。

我相信这已经可以追溯到旧的 Fortran 77(及更早版本)。给予声明

real, dimension(5,5) :: a
Run Code Online (Sandbox Code Playgroud)

我的理解是,标准不要求这个数组是连续的。这与本书第 2 节中所说的一致。第 140 页上的 7.18.1:

...Fortran 标准回避指定数组在占用连续内存位置且没有中间未占用空间的意义上是否是连续的。

但书接着继续(仍然是第 140 页):

标准认为以下任何数组都是连续的:

  • 具有连续属性的数组;
  • 不是指针或假定形状的整个数组(命名数组或数组组件,无需进一步限定);
  • ...
  • 我理解第一个标准;但我对第二个标准感到困惑。这是否与前面的说法不一致,即 fortran 标准不要求将数组按数组元素顺序存储在连续存储中?现代 Fortran 是否已经摆脱了这种范式?或者由于超出我对这个主题的理解的原因,上述引用并不相互矛盾?在上面的例子中,数组a是否需要连续?

    arrays fortran contiguous

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

    确定排序数组是否包含总计N的连续序列

    我正在尝试编写一个算法,它将返回True/False一个排序数组中只包含正整数的连续序列,可以求和N.

    例如:

    Array = {  1, 2, 3, 4 };
    6 is good! 1 + 2 + 3 = 6
    8 is not good! 1 + 3 + 4 = 8, but it's not contiguous, since we skipped the 2.
    
    Run Code Online (Sandbox Code Playgroud)

    这是我试图做的:

    int[] arr = ...;
    int headIndex = 1, tailIndex = 0, sum = arr[0];
    
    while (sum != n)
    {
        if (sum < n)
        {
            sum += arr[headIndex++];
        }
    
        if (sum > n)
        { …
    Run Code Online (Sandbox Code Playgroud)

    algorithm contiguous

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

    在列表中查找ContiguousCount项?

    给出一个清单:

    >>> l = ['x', 'x', 'y', 'y', 'x']
    
    Run Code Online (Sandbox Code Playgroud)

    我可以使用以下方法获取列表的计数collections.Counter:

    >>> from collections import Counter
    >>> Counter(l)
    Counter({'x': 3, 'y': 2})
    
    Run Code Online (Sandbox Code Playgroud)

    如何计算连续项而不是列表中元素的全局计数?例如

    >>> l = ['x', 'x', 'y', 'y', 'x']
    >>> ContiguousCounter(l)
    [('x',2), ('y',2), ('x', 1)]
    
    >>> l = ['x', 'x', 'y', 'y', 'x', 'x', 'x', 'y']
    >>> ContiguousCounter(l)
    [('x',2), ('y',2), ('x', 3), ('y', 1)]
    
    Run Code Online (Sandbox Code Playgroud)

    python counter list contiguous

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

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

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

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

    program test
      INTEGER, DIMENSION(:,:), ALLOCATABLE :: t
      INTEGER :: i, j
      ALLOCATE(t(3,3))
      DO i = 1, 4
       DO j = 1, 4
         t(i,j) = i*j
         !!PRINT *, t(i,j)
       END DO
      END DO
      CALL fun(t(2,1:4:2))
      DEALLOCATE(t)
    
      CONTAINS
        SUBROUTINE fun(arg)
          ! Contiguous dummy argument arg
          INTEGER, CONTIGUOUS :: arg(:)
          PRINT *, arg(2)
        END SUBROUTINE
    end program test
    
    Run Code Online (Sandbox Code Playgroud)

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

    "test_contiguous.f90", line 13: The actual argument number 1 of …
    Run Code Online (Sandbox Code Playgroud)

    fortran contiguous fujitsu-fortran

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

    C++ Vectors总是连续的吗?

    可能重复:
    std :: vector元素是否保证是连续的?

    我遇到过一种技术,人们在C++中使用向量来接收或发送MPI操作的数据,因为它据说将元素连续存储在内存中.

    但是,我仍然怀疑这种方法对于任何大小的向量是否都会保持稳健,特别是当向量增长到一定大小时,这种假设可能会崩溃.

    以下是我所说的一个例子:

    MPI_Recv( &partials[0] , partials.size() , mpi_partial , 0, 
             DALG_ELIMINATE_REQ_MSG ,MPI_COMM_WORLD , &status );
    
    Run Code Online (Sandbox Code Playgroud)

    c++ vector contiguous

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

    Python numpy 数组切片不是 Fortran 连续的

    我定义了一个 Fortran 连续数组:

       import numpy as np
    
       hp  = np.zeros([number_fragments, max(length_fragments_list), 6], order='F')
    
    Run Code Online (Sandbox Code Playgroud)

    该数组的切片在 Fortran 中不是连续的。我该如何解决这个问题?

    hn = hp[0,0:Length-1,:]
    
       hn.flags
    
      C_CONTIGUOUS : False
    
      F_CONTIGUOUS : False
    
    also
    
       hn = hp[0,0:Length-1,:].copy()
    
       hn.flags
    
      C_CONTIGUOUS : True
    
      F_CONTIGUOUS : False
    
    Run Code Online (Sandbox Code Playgroud)

    如何在切片后轻松获得 Fortran 连续数组?

    python arrays numpy f2py contiguous

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

    交换后,矢量会保持连续吗?

    交换两个元素后,向量是否会保持连续状态?

    PS:无论答案是什么,我们怎么能确定?如果那是可能的.

    c++ swap vector contiguous c++11

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

    如何为结构数组动态分配内存

    我对C很新,并且无法弄清楚如何将连续内存分配给结构数组.在这个赋值中,我们给出了代码的shell,并且必须填写其余部分.因此,我无法更改变量名称或函数原型.这是给我的:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    struct student {
        int id;
        int score;
    };
    
    struct student *allocate() {
        /* Allocate memory for ten students */
        /* return the pointer */
    }
    
    int main() {
        struct student *stud = allocate();
    
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我只是不确定如何去做那些评论在分配功能中所说的内容.

    c arrays struct memory-management contiguous

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

    pandas DataFrame删除连续的重复项

    如何删除DataFrame中的连续/连续/相邻重复项?

    我正在处理CSV格式的数据,按日期排序,然后按标识号排序。标识号可以在不同的日期出现,但是我只想删除每日重复的记录。drop_duplicates会留下一个唯一的实例,但随后所有其他日子都将其删除。我已经尝试过,但是得到了错误:

    localhost:~/Desktop/Public$ python3 test.py 
    Traceback (most recent call last):
      File "test.py", line 31, in <module>
        df2.loc[df2.shift(1) != df2]
      File "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line 1028, in __getitem__
        return self._getitem_axis(key, axis=0)
      File "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line 1148, in _getitem_axis
        raise ValueError('Cannot index with multidimensional key')
    ValueError: Cannot index with multidimensional key
    
    Run Code Online (Sandbox Code Playgroud)

    编辑原始帖子以添加:

    我尝试index_reset()删除任何多索引。这是数据集的示例:

    ,DATE,REC,NAME
    0,07/02/2009,682566,"Schmoe, Joe"
    1,07/02/2009,244828,"Doe, Joe"
    2,07/11/2009,325640,"Black, Joe"
    3,07/11/2009,544440,"Dirt, Joe"
    4,07/11/2009,544440,"Dirt, Joe"
    5,07/16/2009,200560,"White, Joe"
    6,07/16/2009,685370,"Purple, Joe"
    7,07/16/2009,685370,"Purple, Joe"
    8,07/16/2009,635400,"Red, Joe"
    9,07/16/2009,348562,"Blue, Joe
    
    Run Code Online (Sandbox Code Playgroud)

    python duplicates dataframe pandas contiguous

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

    传递给函数的变量是否存储在连续的内存位置?

    我写了这个小函数:

    int mayor(int n1, int n2, int n3, int n4, int n5) {
    
       int mayor = n1;
    
       for(int *p=&n2; p<=&n5; ++p)
    
               mayor = *p;
    
       return mayor;
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

    能够保证所有包含该内存块n1n5是连续的?既然我得到了预期的回报值,我希望如此,但我想知道这是否安全.

    c parameter-passing calling-convention memory-layout contiguous

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