NumPy中ndarray和array的区别是什么?

NumPy中ndarrayarray之间的区别是什么?它们在NumPy源代码中的实现在哪里?

165214 次浏览

numpy.array是一个返回numpy.ndarray对象的函数。

没有numpy.array类型的对象。

numpy.array只是一个方便的函数,用于创建ndarray;它本身不是一个类。

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

数组应该使用arrayzerosempty…这里给出的参数指的是a 用于实例化数组的低级方法(ndarray(...))

实现的大部分内容是在C代码在multiarray中中实现的,但是你可以从这里开始查看ndarray接口:

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

只需几行示例代码来显示numpy之间的区别。数组和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))

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

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

在numpy docs中,如果你想从ndarray类中创建一个数组,你可以用引用的两种方法来做:

1-使用array()zeros()empty()方法: 数组应该使用array、0或空来构造(请参阅下面的See Also部分)。这里给出的参数指的是用于实例化数组的低级方法(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
另一个例子是将数组对象分配给缓冲区 例子:< / p >
>>> 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])

从上面的例子中,我们注意到我们不能将一个列表分配给“buffer”,我们必须使用numpy.array()返回缓冲区的ndarray对象

结论:如果你想创建一个numpy.ndarray()对象,请使用numpy.array()