为什么我们使用np作为前缀,通过使用numpy库中的函数来创建数组,而不是在调用“创建函数”时使用它。
import numpy as np 例句:1.创造功能
arr=np.zeros(2)这个数组创建了一个2乘2的数组,所有元素都为零。
2.除创造功能外->
arr.reshape(1,4)这个修改创建的数组arr
现在您可以看到np被用作第一个的前缀,而不是第二个。既然它们都来自于numpy库,我们为什么不用它来重塑某种功能呢?
发布于 2022-09-05 16:01:58
您需要阅读一些python和numpy基础知识。对于numpy来说,一个好的开端是
https://numpy.org/doc/stable/user/absolute_beginners.html
使用import numpy as np,您已经安装了一个名为np的namespace。使用np前缀引用名称空间中的项。
arr=np.zeros(2)zeros是命名空间中的function。它接受一个参数(可能更多--参见文档),在这里2并返回一个numpy.ndarray对象(‘一个数组’)。这个表达式将它赋值给arr变量。
b = arr.reshape(1,4)arr具有属性和方法。methods类似于函数,但它们被“接通”到特定对象,而不是np命名空间。这里reshape是方法,我们向它传递两个数字。它返回另一个数组。在更大的范围内,重要的是要知道这个b数组是一个view,尽管这不是当前的焦点。
b = np.reshape(a, (1,4))numpy经常(但不总是)提供function版本的methods。对于大多数python模块来说,情况并非如此。
在交互式ipython会话中,我们可以测试代码:
In [32]: arr = np.zeros(4)
In [33]: arr
Out[33]: array([0., 0., 0., 0.])
In [34]: b = arr.reshape(4,1)
In [35]: b
Out[35]:
array([[0.],
[0.],
[0.],
[0.]])
In [37]: c = np.reshape(arr, (1,4))
In [38]: c
Out[38]: array([[0., 0., 0., 0.]])每个数组都有一个shape属性:
In [40]: arr.shape
Out[40]: (4,)
In [41]: b.shape
Out[41]: (4, 1)
In [42]: c.shape
Out[42]: (1, 4)所有这些都不会修改arr。有些操作确实会修改数组,例如
In [44]: arr[1:3] = [1,2]
In [45]: arr
Out[45]: array([0., 1., 2., 0.])虽然可以编写修改对象(例如数组)的functions和methods,但大多数numpy对象不这样做。
实际工作的一个常见方法是附加的列表:
In [46]: alist = [1,2]
In [47]: alist.append([3,4])
In [48]: alist
Out[48]: [1, 2, [3, 4]]在我的头上,sort是唯一一种适用于数组的方法:
In [49]: arr.sort()
In [50]: arr
Out[50]: array([0., 0., 1., 2.])编辑
通常,职能的定义是:
def foo(args):
....
return ...和班级
class Foo():
def __init__ ...
def foo(self, args):
....与foo(1,2)或f = Foo(); f.foo(....)连用。在这里,foo函数完全独立于Foo.foo方法。
numpy有大量的编译代码。np.array(...)创建一个numpy.ndarray对象。那个对象有很多方法。与reshape一样,它显式地定义了function等效项。这些函数通常将输入转换为数组(视需要而定),然后调用相应的方法。所有这些都不是python所隐含的。
使用我的示例,可以执行类似Foo.foo(f, args)的操作,即用类名引用方法,并将f对象传递为self。但这不是numpy正在做的事情。
每个类都有一组已定义的方法。list有append,extend,index这样的东西。名称在其他类中可能类似,但操作是唯一的(除非类继承起作用)。
这不是在np.array上调用alist函数
In [58]: alist.array()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [58], in <cell line: 1>()
----> 1 alist.array()
AttributeError: 'list' object has no attribute 'array'它要求list对象执行的是array方法--它没有这个方法。
类似地,如果我试图在数组上使用list方法:
In [59]: arr.append(3)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [59], in <cell line: 1>()
----> 1 arr.append(3)
AttributeError: 'numpy.ndarray' object has no attribute 'append'我不愿在这个例子中使用append,因为这里有np.append函数,我不得不反复强调,它不是一个列表附加的克隆。它的名称很差,造成了各种各样的混乱。
使用DOCS
https://numpy.org/doc/stable/reference/generated/numpy.reshape.html https://numpy.org/doc/stable/reference/generated/numpy.ndarray.reshape.html https://numpy.org/doc/stable/reference/generated/numpy.ndarray.shape.html#numpy.ndarray.shape
https://numpy.org/doc/stable/reference/routines.html
这个numpy页面泛泛地谈到了routines,其中一些用于创建数组,另一些则被描述为操作。在这个列表中,像ndarray.flat这样的名称意味着它是一个数组方法,而不是一个模块函数。
https://stackoverflow.com/questions/73605440
复制相似问题