ndarray
Numpy和Numpy有什么区别array
?我在哪里可以找到 numpy 源代码中的实现?
5 回答
numpy.array
只是一个方便的功能来创建一个ndarray
; 它本身不是一个类。
您也可以使用 创建数组numpy.ndarray
,但这不是推荐的方式。从文档字符串numpy.ndarray
:
应使用
array
,zeros
或... 构造数组。此处给出的参数是指用于实例化数组empty
的低级方法 ( )。ndarray(...)
实现的大部分内容都在 C 代码中,在 multiarray 中,但您可以在此处开始查看 ndarray 接口:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
numpy.array
是一个返回 a 的函数numpy.ndarray
。没有对象类型 numpy.array。
只需几行示例代码即可显示 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))
numpy.ndarray()
是一个类,numpy.array()
而是一个方法/函数来创建ndarray
。
在 numpy 文档中,如果你想从ndarray
类中创建一个数组,你可以用 2 种方法来完成它:
1- using array()
, zeros()
orempty()
方法:
应使用数组、零或空来构造数组(请参阅下面的另请参阅部分)。ndarray(…)
此处给出的参数是指用于实例化数组的低级方法 ( )。
2-ndarray
直接从类:
有两种使用创建数组的模式__new__
:如果缓冲区为无,则仅使用形状、数据类型和顺序。如果 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.array()
如果你想制作一个numpy.ndarray()
对象,请使用“
我认为np.array()
尽管您提到订单,但您只能像创建 C 一样,当您检查使用np.isfortran()
它时说假。但是np.ndarrray()
当您指定它根据提供的订单创建的订单时。