NumPy中ndarray和array的区别是什么?它们在NumPy源代码中的实现在哪里?


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

没有numpy.array类型的对象。


numpy。Array只是一个创建ndarray的方便函数;它本身不是一个类。

您还可以使用numpy创建一个数组。Ndarray,但它不是推荐的方式。从numpy.ndarray的文档字符串:

数组应该使用array, 0或empty…这里给出的参数指的是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文档中,如果你想从ndarray类中创建一个数组,你可以用引用的两种方法来做:

1-使用array(), zero()或empty()方法: 数组应该使用array、0或空来构造(请参阅下面的See Also部分)。这里给出的参数指的是用于实例化数组的低级方法(ndarray(…))。

2-直接从ndarray类 使用__new__创建数组有两种模式: 如果buffer为None,则只使用shape、dtype和order。 如果buffer是一个公开buffer接口的对象,那么所有关键字都将被解释。

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

np ndarray, dtype=float, order= F,缓冲器=None 争吵([-1.13698227e+002, 4.25087011e-303], [2. 8852841414306, 3.27025015e-309])随机

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

>>> np.ndarray((2,), buffer=np.array([1,2,3]), ….itemsize抵消= np.int_ (), …Dtype =int) # offset = 1*itemsize,即跳过第一个元素 阵列([2、3])

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

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