numpy(基于Numpy外文文档的学习)

学习目标:

  • Understand the difference between one-, two- and n-dimensional arrays in NumPy;

  • Understand how to apply some linear algebra operations to n-dimensional arrays without using for-loops;(调用一些简单的方法)

  • Understand axis and shape properties for n-dimensional arrays.(axis为维度)

numpy的构成axis和length,其中axis表示为多少维度。length表示里面的元素。如【1,2,1】axis为1,length为3

他有几个属性:

ndarray.ndim      #数组是几维的

ndarray.shape   #去形容数组是什么形状。如二维数组是3*3的数组,

ndarray.size   #算里面装有多少个元素(element)。      

#注意:最内部的一个 []表示一个元素,无论元素内有多少个数字

ndarray.dtype  #数据类型

ndarray.itemsize   #数组占了多少字节

ndarray.data  #一般用不上,

创建array方法

1、通过常规python的list或者set创建数组

import numpy as np
>>> a = np.array([2, 3, 4])
>>> a
array([2, 3, 4])

2、通过特殊函数去创建函数。注意:该初始化的数组后续数据一般需要我们自己去补充

#zero函数。

创建全零的数组

np.zeros((3, 4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

#ones。创建全一的数组

np.ones((2, 3, 4), dtype=np.int16)
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

#empty。仅创建空间。内部数据是内存中未删除干净的。

np.empty((2, 3)) 
array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260],  # may vary
       [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])

3、numpy中有arange函数。

np.arange(10, 30, 5)
array([10, 15, 20, 25])
>>> np.arange(0, 2, 0.3)  # it accepts float arguments
array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])         

#arange(起始值,终止值,间隔)

输出array

由需要输出的最高维度的最左边的值往右边输出,

a = np.arange(6)                    # 1d array
>>> print(a)
[0 1 2 3 4 5]
>>>
>>> b = np.arange(12).reshape(4, 3)     # 2d array
>>> print(b)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
>>>
>>> c = np.arange(24).reshape(2, 3, 4)  # 3d array
>>> print(c)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

#其中 np.arange(24).reshape(2, 3, 4),相当于做了两个操作。

#首先是np.arange(24),创建了一个一维数组。

#[1,2,3..........,24]

#然后执行了reshape将上面的一维数组转换为了对应的维度的数组

基本操作/对数组内数值的操作:

操作以元素为单位

1、*号和@(or dot函数)的区别

*表示元素内的元素1对1的相乘。

@(dot)则是类似于线性代数的矩阵相乘,如A*B=C,是A的第n行乘以B的第m列,相加得到C(n,m)位置的具体值

2、+=和*=等相关操作,是对原有数组进行修改,而非创建新数组

3、numpy增加了一元运算的功能。(类似于excal中的sum、min功能)

 #    若调用函数则多为整个数组进行操作,  也可以通过指定axis确定操作的凭据。

4、通用函数:numpy中自行封装了一些数学函数,如:sin、cos等

5、numpy中可以使用索引,切片,迭代进行操作

一维函数多维函数(假设三维)
索引仅需提供一个值。如:a【1】需要给出对应个数的维度的值。如:a[1,2,3],才能找到具体的值
切片提供两个值。 a[x:y]

此处有两种办法。

不提供具体的a[x,y,z],其中的x,y,z可以省略一小部分,

或者通过“:”表示截取一部分。

迭代从左至右,由小到大

由小到大,由最低维度开始一个一个增加

迭代中提供了flat作为多维函数的迭代器

对数组shape(形状)的操作:

改变array的形状,

An array has a shape given by the number of elements along each axis

通过指定各个维度需要多少个数,确定形状

a = np.floor(10 * rg.random((3, 4)))
a
array([[3., 7., 3., 4.],
       [1., 4., 2., 2.],
       [7., 2., 4., 9.]])
a.shape    #我们在上面指定了3行4列的数组
(3, 4)




#np.floor()表示向下取整
#rg.random ,其中rg是被重命名的包
#通过import numpy.random as rg 表示
#random会生成0,1的数字,其中3,4表示多少行多少列
reshape、resize、ravel、a.t方法异同:
import numpy as np
import numpy.random as rg
a = np.floor(10 * rg.random((3, 4)))
print(a)
#result:
[[3. 4. 5. 3.]
 [6. 3. 4. 5.]
 [8. 6. 8. 5.]]


a.ravel():
#result:array([3., 4., 5., 3., 6., 3., 4., 5., 8., 6., 8., 5.])
方法内无法写入改变的参数,执行此方法会变成一维顺序输出

#a.reshape():通过在()内写入参数可以改变维度、注:可以写入多个,多少个表示多少维度
#a.t则是转置,如:两行六列————转换为————>六行两列

上述方法,相当于是一个临时结果,如果不用变量接,就是一次性的物品



a.resize(),则是直接对这个数组进行操作,操作结果会保存在原数组内
堆叠多个维度的数组

hstack、vstack、column_stack、concatenate 四个方法

vstack方法,将两个数组自上而下的进行堆叠,(增加的是行数)   numpy.r_()和他同理

hstack和column_stack的异同
hstack/ np.c_()  两个函数效果相同column_stack
通过此方法自左向右增加通过此方法也是自左向右增加

在一维数组时合并之后只会增加数组长度

一维数组会强制转换为二维数组

concate :用于多维度的数组处理

将数组拆分
hspit()函数:对列进行分割

两种填入数据方式

1、将数组均匀的分割成n分

2、将数组按照自己规定的方式进行分割

vsplit(对行进行分割)

使用方法和上述一样。

均匀分割

根据需求分割:

副本与视图:
Not copy at allshallow copydeep copy
复制的东西就是本身复制的东西不是本身,是基于本身,对视图的影响也会回馈到本身复制后两者互相独立,对一方的操作不影响另一方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值