在numpy中ndarray和array之间有什么区别?

时间:2013-04-08 12:41:55

标签: python arrays numpy multidimensional-array numpy-ndarray

Numpy中ndarrayarray之间有什么区别?我在哪里可以找到numpy源代码中的实现?

5 个答案:

答案 0 :(得分:162)

numpy.array只是创建ndarray的便利功能;它本身不是一个阶级。

您也可以使用numpy.ndarray创建数组,但这不是推荐的方式。来自numpy.ndarray的文档字符串:

  

应使用arrayzerosempty构建数组...此处给出的参数指的是   用于实例化数组的低级方法(ndarray(...))。

实现的大部分内容都是用C代码here in multiarray编写的,但你可以在这里开始查看ndarray接口:

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py

答案 1 :(得分:41)

numpy.array是一个返回numpy.ndarray的函数。没有对象类型numpy.array。

答案 2 :(得分:22)

只需几行示例代码即可显示numpy.array和numpy.ndarray之间的区别

预热步骤:构建列表

a = [1,2,3]

检查类型

print(type(a))

你会得到

<class 'list'>

使用np.array构建数组(来自列表)

a = np.array(a)

或者,您可以跳过预热步骤,直接

a = np.array([1,2,3])

检查类型

print(type(a))

你会得到

<class 'numpy.ndarray'>

告诉你 numpy数组的类型是numpy.ndarray

您还可以通过

检查类型
isinstance(a, (np.ndarray))

你会得到

True

以下两行中的任何一行都会显示错误消息

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

答案 3 :(得分:2)

numpy.ndarray()是一个类,而numpy.array()是创建ndarray的方法/函数。

在numpy文档中,如果您想从ndarray类创建数组,则可以使用两种方式来引用它:

1-使用array(),zeros()或empty()方法: 数组应使用数组(零或为空)构造(请参阅下面的另请参见部分)。这里给出的参数指的是用于实例化数组的低级方法(ndarray(…))。

2-直接来自ndarray类: 有两种使用 new 创建数组的模式:     如果buffer为None,则仅使用shape,dtype和order。     如果buffer是暴露buffer接口的对象,则将解释所有关键字。

下面的示例给出了一个随机数组,因为我们没有分配缓冲区值:

np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None)

array([[ -1.13698227e+002,   4.25087011e-303],
       [  2.88528414e-306,   3.27025015e-309]])         #random

另一个示例是将数组对象分配给缓冲区 例如:

>>> np.ndarray((2,), buffer=np.array([1,2,3]),
...            offset=np.int_().itemsize,
...            dtype=int) # offset = 1*itemsize, i.e. skip first element
array([2, 3])

在上面的示例中,我们注意到我们无法为“缓冲区”分配列表,我们不得不使用numpy.array()返回缓冲区的ndarray对象

结论:如果要创建“ numpy.ndarray() <,请使用“ numpy.array() ” < / strong>对象”

答案 4 :(得分:0)

我认为使用np.array()只能创建C,就像您提到的顺序一样,当您使用np.isfortran()检查时,它说是false。但是当您指定它根据提供的顺序创建的顺序时使用np.ndarrray()