![](/img/trans.png)
[英]What is the difference between numpy.array([]) and numpy.array([[]])?
[英]What is the difference between ndarray and array in numpy?
Numpy 中的ndarray
和array
什么区别? 我在哪里可以找到 numpy 源代码中的实现?
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
是一个返回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, ie skip first element array([2, 3])
从上面的例子我们注意到我们不能将一个列表分配给“缓冲区”,我们不得不使用 numpy.array() 来返回缓冲区的 ndarray 对象
结论:使用numpy.array()
如果你想使一个numpy.ndarray()
对象”
我认为使用np.array()
您只能创建 C,尽管您提到了顺序,但当您使用np.isfortran()
检查时,它显示为 false。 但是当您根据提供的顺序指定它创建的顺序时,使用np.ndarrray()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.