numpy学习笔记(莫烦python)

import numpy as np

numpy属性

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

print(array)

print(‘number of dim’,array.ndim)

print(‘shape:’,array.shape)

print(‘size’,array.size)

numpy的创建array

创建数组

a = np.array([2,23,4])

print(a)

指定数据

a = np.array([2,23,4],dtype=np.int)

print(a.dtype)

a = np.array([2,23,4],dtype=np.int32)

print(a.dtype)

a = np.array([2,23,4],dtype=np.float)

print(a.dtype)

a = np.array([2,23,4],dtype=np.float32)

print(a.dtype)

创建特定的数据

矩阵

a = np.array([[2,23,4],[2,32,4]])

print(a)

全零数组

a = np.zeros((3,4))

print(a)

创建全一数组,同时指定这些特定数据的dtype

a = np.ones((3,4),dtype=np.int)
a

创建全空数组,其实每个值都是接近零的数

a = np.empty((3,4))
a

用arange创建连续数组

a = np.arange(10,20,2)
a

用reshape改变数据的形状

a = np.arange(12).reshape((3,4))
a

用linspace创建线段型数据

a = np.linspace(1,10,20)
a

a = np.linspace(1,10,20).reshape((5,4))
a

Numpy基础运算1

import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
a,b

numpy的几种基本运算

c=a-b
c

c=a+b
c

c=a*b
c

#乘方

c=b**2
c

数学工具,三角函数

c=10*np.sin(a)
c

除了函数应用外,在脚本中对print函数进行一些修改可以进行逻辑判断

print(b<3)

此时由于进行逻辑判断,

返回的是一个bool类型的矩阵,即对满足要求的返回True,不满足的返回False。

上述程序执行后得到的结果是[True True True False]。 需要注意的是,

#如果想要执行是否相等的判断, 依然需要输入 == 而不是 = 来完成相应的逻辑判断。

#上述运算均是建立在一维矩阵,即只有一行的矩阵上面的计算,

如果我们想要对多行多维度的矩阵进行操作,需要对开始的脚本进行一些修改:

a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))

print(a)

print(b)

稍显不同的是,Numpy中的矩阵乘法分为两种,

#其一是前文中的对应元素相乘,
#其二是标准的矩阵乘法运算,
#即对应行乘对应列得到相应元素:

矩阵乘法

c_dot = np.dot(a,b)

print(c_dot)

另一种dot的表示方法

c_dot_2 = a.dot(b)

print(c_dot_2)

sum(),min(),max()的使用

import numpy as np

a=np.random.random((2,4))

print(a)

np.sum(a)

np.min(a)

np.max(a)

查找运算

如果你需要对行或者列进行查找运算,

就需要在上述代码中为 axis 进行赋值。

当axis的值为0的时候,将会以列作为查找单元,

当axis的值为1的时候,将会以行作为查找单元。

print(“a =”,a)

print(“sum =”,np.sum(a,axis=1))

print(“min =”, np.min(a,axis=0))

print(“max =”,np.max(a,axis=1))

numpy基础运算2

有关索引的运算

import numpy as np
A = np.arange(2,14).reshape((3,4))

print(np.mean(A))
print(np.average(A))

模仿dot()的使用法则,mean()还有另一种写法

print(A.mean())

同样的,可以写出求解中位数的函数

#print(A.median()) # 用不了?
np.median(A)

和matlab中的cumsum()累加函数类似,Numpy中也具有cumsum()函数

print(np.cumsum(A))

累差运算的函数

print(np.diff(A))
#每一行中后一项与前一项之差。故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。

nonzero()函数

print(np.nonzero(A))
#这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。

#wo们可以对所有元素进行仿照列表一样的排序操作,
#但这里的排序函数仍然仅针对每一行进行从小到大排序操作:

import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)

print(np.sort(A))

矩阵的转置有两种表示方法

print(np.transpose(A))

print(A.T)

特别的,numpy里面有clip()函数,例子如下

print(A)

print(np.clip(A,5,9))

Numpy索引

一维索引

类似 a[2] 的索引方法

import numpy as np

A = np.arange(3,15)

print(A[3])

print(A[0])

此时我们将矩阵转化成二维的,然后进行同样的操作

A = np.arange(3,15).reshape((3,4))

print(A[2])

此时对应的实际上是矩阵A从第三行(从0开始算)开始的所有元素

二维索引

A = np.arange(3,15).reshape((3,4))
A

print(A[1][1])

其他表示方法

print(A[1,1])

在python的list中,我们可以利用 : 对一定范围内的元素进行切片操作,

在numpy中我们依然可以给出相应的方法

print(A[1,1:3])

这一表示形式即针对第二行中第2到第4列元素进行切片输出(不包含第4列)。

此时我们适当的利用for函数进行打印

for row in A:
print(row)

此时他会逐行进行打印操作

如果想逐列进行打印,就需要稍微变化一下

for column in A.T:
print(column)

最后说一个关于逐代输出的问题

import numpy as np

A = np.arange(3,15).reshape(3,4)

print(A.flatten())

for item in A.flat:
print(item)

#这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。

而flat是一个迭代器,本身是一个object属性

numpy array合并

np.vstack() 上下合并

import numpy as np

A = np.array([1,1,1])
A

B = np.array([2,2,2])
B

print(np.vstack((A,B)))

#vertical stack本身属于一种上下合并,即对括号中的两个整体进行对应操作。此时我们对组合而成的矩阵进行属性探究:

C = np.vstack((A,B))

print(A.shape, C.shape)

np.hstack() 左右合并

D = np.hstack((A,B))

print(D)

print(A.shape,D.shape)

np.newaxis() 转置操作

#说完了array的合并,
#我们稍稍提及一下前一节中转置操作
#,如果面对如同前文所述的A序列,
#转置操作便很有可能无法对其进行转置(因为A并不是矩阵的属性),
#此时就需要我们借助其他的函数操作进行转置:

print(A[np.newaxis,:])

print(A[np.newaxis,:].shape)

print(A[:,np.newaxis])

print(A[:,np.newaxis].shape)

结合着上面的知识,我们把它综合起来:

import numpy as np

A = np.array([1,1,1])[:,np.newaxis]
A

B = np.array([2,2,2])[:,np.newaxis]
B

C = np.vstack((A,B))
C

D = np.hstack((A,B))
D

print(D)

print(A.shape,D.shape)

np.concatenate() 合并多个矩阵或序列

#当你的合并操作需要针对多个矩阵或序列时,借助concatenate函数可能会让你使用起来比前述的函数更加方便:

C = np.concatenate((A,B,B,A),axis=0)
C

print©

D = np.concatenate((A,B,B,A),axis=1)
D

print(D)

#axis参数很好的控制了矩阵的纵向或是横向打印,相比较vstack和hstack函数显得更加方便。

Numpy array 分割

创建数据

import numpy as np

A = np.arange(12).reshape((3,4))

print(A)

纵向分割

print(np.split(A,2,axis=1))

C,D = np.split(A,2,axis=1)

C,D

横向分割

print(np.split(A,3,axis=0))

错误的分割

范例的Array只有4列,只能等量对分,因此输入一下程序代码后python会报错

print(np.split(A,3,axis=1))

为了解决这种情况,我们会有下面这种方式

不等量的分割

print(np.array_split(A,3,axis=1))

其他的分割方式

print(np.vsplit(A,3)) # #等于 print(np.split(A, 3, axis=0))

print(np.hsplit(A,2))

Numpy copy & deep copy

= 的赋值方式会带有关联性

首先import numpy 并建立变量,给变量赋值

import numpy as np

a = np.arange(4)

b = a

c = a

d = b

改变a的第一个值,b,c,d,的第一个值也会随之改变

a[0]=11

print(a)

确定b, c, d, 与 a 是否相同

b is a

c is a

d is a

同样,改变d的值,a,b,c也会改变

d[1:3] = [22,33]

print(a)

print(b)

print©

copy的赋值方式没有关联性

b = a.copy()

print(b)

a[2] = 44

print(a)

print(b)

你可能感兴趣的:(numpy学习笔记(莫烦python))