NumPy中ndarray和array之间的区别是什么?它们在NumPy源代码中的实现在哪里?
ndarray
array
numpy.array是一个返回numpy.ndarray对象的函数。
numpy.array
numpy.ndarray
没有numpy.array类型的对象。
numpy.array只是一个方便的函数,用于创建ndarray;它本身不是一个类。
你也可以使用numpy.ndarray创建数组,但这不是推荐的方法。从numpy.ndarray的文档字符串:
数组应该使用array, zeros或empty…这里给出的参数指的是a 用于实例化数组的低级方法(ndarray(...))
zeros
empty
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])
<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()时,当你指定它根据提供的顺序创建的顺序。
np.array()
np.isfortran()
np.ndarrray()
numpy.ndarray()是一个类,而numpy.array()是创建ndarray的方法/函数。
numpy.ndarray()
numpy.array()
在numpy docs中,如果你想从ndarray类中创建一个数组,你可以用引用的两种方法来做:
1-使用array(), zeros()或empty()方法: 数组应该使用array、0或空来构造(请参阅下面的See Also部分)。这里给出的参数指的是用于实例化数组的低级方法(ndarray(…))
array()
zeros()
empty()
ndarray(…)
2-从ndarray类直接 使用__new__创建数组有两种模式: 如果buffer为None,则只使用shape、dtype和order。 如果buffer是一个公开buffer接口的对象,那么所有的关键字都将被解释
__new__
下面的例子给出了一个随机数组,因为我们没有分配缓冲区值:
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])
从上面的例子中,我们注意到我们不能将一个列表分配给“buffer”,我们必须使用numpy.array()返回缓冲区的ndarray对象
结论:如果你想创建一个numpy.ndarray()对象,请使用numpy.array()。