Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy库是如何实现n维数组的?_Python_C++_C_Numpy_Inheritance - Fatal编程技术网

Python numpy库是如何实现n维数组的?

Python numpy库是如何实现n维数组的?,python,c++,c,numpy,inheritance,Python,C++,C,Numpy,Inheritance,numpy是一个python库 有n维数组、n维数组的切片和n维数组的选择: A = np.empty( (10,4,5) ) # a 3-dimensional array B = A[1] # slice of A, this doesn't copy # the data of A. C[[0,1,5]] # selection of a n-dimensional array A

numpy是一个python库

有n维数组、n维数组的切片和n维数组的选择:

A = np.empty( (10,4,5) ) # a 3-dimensional array
B = A[1]                 # slice of A, this doesn't copy
                         # the data of A.
C[[0,1,5]]               # selection of a n-dimensional array
A[[0,1,5]] = 4           # what is the thing at left?
如何实现C++中类似的东西?这三种情况应该属于同一个抽象类。如果没有,数学函数是否都有9个版本(A+A、A+B、A+C…)

如果它们都属于同一个抽象类,如何实现? 我应该读哪个numpy源代码文件

可能的C实现++

  • 定义一个数组类A。一个内存块附加到类A。另一个类B从类A的对象构造一个n维数组。没有内存块附加到类B,但B有一个指向A内存子部分的指针。切片B创建另一个B

  • 缺点是当A被销毁时,B不会被销毁。

    numpy
    使用
    C
    ,而不是
    C++
    。它可以使用C++编写的库,也可以使用FORTRAN,但核心是代码> C>代码>。当然还有很多Python,使用Cython将Python翻译成C

    该代码可以在NumpyGithub存储库中找到,但并不容易理解

    有一个
    np.ndarray
    类。所有这些物体都是这个

    A = np.empty( (10,4,5) ) # a 3-dimensional array
    
    是一个ndim=3的
    ndarray
    ,形状为(10,4,5)。它有一个
    databuffer
    ——一个带有实际数据值的1d C数组

    B = A[1]                 # slice of A, this doesn't copy
    
    这是一种观点。它是另一个
    ndarray
    ,具有
    ndim
    2,形状(4,5),但它与一个共享数据缓冲区

    C[[0,1,5]]  
    
    这是另一个
    ndarray
    ,ndim为3,形状为(3,4,5)。它的databuffer是新的,其值是从A复制的

    从C程序员的角度描述数组。我相信基本的数组类是
    PyArrayObject

    PyArrayObject C结构包含数组所需的所有信息。ndarray的所有实例(及其子类)都将具有此结构


    ;) 更严重的是,您的问题要么不清楚,要么太宽泛,要么是针对非现场资源的推荐问题。无论哪种情况,都不能以当前的形式来回答。C++?NumPy是用C和Python混合编写的。源代码太大了。哪个文件定义了n维数组的实现?它们如何进行清理?销毁A、B和C也会释放内存吗?谢谢你的解释。A和B共享的数据缓冲区只有在解释器对其进行垃圾收集后才能释放。C独立于两者。但用户通常不会关注这些内存细节。