在Numpy中ndarray
和array
有什么区别?我在哪里可以找到numpy源代码中的实现?
numpy.array
只是一个创造ndarray
的便利功能;它本身不是一个阶级。
您也可以使用numpy.ndarray
创建一个数组,但这不是推荐的方法。从numpy.ndarray
的文档字符串:
应使用
array
,zeros
或empty
构造数组...此处给出的参数是指用于实例化数组的低级方法(ndarray(...)
)。
实现的大多数内容都是使用C代码,here in multiarray,但是你可以在这里开始查看ndarray接口:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
numpy.array
是一个返回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 docs中,如果你想从ndarray类创建一个数组,你可以用引用的2种方式来做:
1-使用array(),zeros()或empty()方法:数组应使用数组,零或空构造(请参阅下面的“另请参阅”部分)。这里给出的参数是指用于实例化数组的低级方法(ndarray(...))。
2-来自ndarray类:使用new创建数组有两种模式:如果buffer是None,则只使用shape,dtype和order。如果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()”
我认为使用np.array()
你只能创建C,就像你提到订单一样,当你使用np.isfortran()
检查时,它说的是假的。但是当你根据提供的订单指定它创建的订单时,使用np.ndarrray()
。