333

ndarrayNumpy和Numpy有什么区别array?我在哪里可以找到 numpy 源代码中的实现?

4

5 回答 5

291

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

于 2013-04-08T12:51:01.930 回答
64

numpy.array是一个返回 a 的函数numpy.ndarray。没有对象类型 numpy.array。

于 2013-04-08T12:46:32.857 回答
46

只需几行示例代码即可显示 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))
于 2017-12-21T03:25:25.557 回答
10

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()对象,请使用“

于 2018-09-23T16:02:16.313 回答
-2

我认为np.array()尽管您提到订单,但您只能像创建 C 一样,当您检查使用np.isfortran()它时说假。但是np.ndarrray()当您指定它根据提供的订单创建的订单时。

于 2018-08-30T20:09:12.410 回答