NumPy中ndarray
和array
的区别是什么?它们在NumPy源代码中的实现在哪里?
numpy.array
只是创建ndarray
的方便函数;它本身并不是一个类。
您也可以使用numpy.ndarray
创建数组,但这不是推荐的方法。来自numpy.ndarray
的文档字符串:
数组应该使用
array
,zeros
或empty
…这里给出的参数是指a用于实例化数组的低级方法(ndarray(...)
)。
实现的大部分内容都是用C代码编写的,这里是multiarray,但你可以从这里开始看narray接口:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.pynumpy.array
是返回numpy.ndarray
对象的函数。
没有numpy.array
类型的对象
只是几行示例代码来显示numpy和numpy之间的区别。Array和numpy. narray
热身步骤:构造列表
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. narray
也可以通过
检查类型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
类创建一个数组,你可以用两种方法来做,如引号所示:
1-使用array()
, zeros()
或empty()
方法:数组应该使用array、0或空来构造(请参阅下面的"参考"部分)。这里给出的参数引用了用于实例化数组的低级方法(ndarray(…)
)。
2- from ndarray
class direct:使用__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
另一个例子是将数组对象赋值给缓冲区例子:
从上面的例子中,我们注意到我们不能将列表赋值给"buffer",我们必须使用numpy.array()来返回缓冲区的narray对象>>> 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.ndarray()
对象,使用numpy.array()
"
我认为与np.array()
你只能创建C虽然你提到的顺序,当你使用np.isfortran()
检查它说假。但是对于np.ndarrray()
,当您指定它根据所提供的顺序创建的顺序时。