jupyter notebook_numpy_1

 

 

Numerical Python(数值化的python)

  • 1.numpy在内存运算上占有优势,核心数据类型叫做ndarray (n dimension array)
  • 2.使用数组管理内存
  • 3.numpy是一个并行计算的库(高密计算),不是直接由python进行封装的,是c语言封装的一个python库,它没有GIL锁.
  • 4.numpy是python人工智能的基础库.其它的库都依赖于numpy.

numpy中的数据类型

python中有自己的数据类型.

numpy中的数据类型相对于python来说,更加的细致

  • 1.bool:布尔 , 1 字节
  • 2.int :整数类型,代表的是int64. (bigint 8字节)
  • 3.intc: int32 (int 4个字节)
  • 4.intp:只用于索引,int64
  • 5.int8:(tinyint 1个字节)
  • 6.int16:(smallint 2字节)
  • 7.int32:(int 4个字节)
  • 8.int64:(bigint 8个字节)
  • 9.float:float64
  • 10.float16 : 半精度
  • 11.float32 : 单精度
  • 12.float64 : 双精度
  • 13.complex : complex128
  • 14.complex64:由两个32的浮点数组成的
  • 15.complex128:由两个64的浮点数组成的
  • 16.uint8 : 无符号的整数
  • 17.uint16 : 无符号的整数
  • 18.uint32 : 无符号的整数
  • 19.uint64 : 无符号的整数
  • 20.时间序列

In [2]:

 

#anaconda中自带numpy
#如果要自己安装的话,解决依赖关系
import numpy as np
import matplotlib.pyplot as plt

In [3]:

 

 
lj = plt.imread('onr.jpg')
#在jupyter中如果不使用输出函数,那么最后一个变量会默认调用display()
plt.imshow(lj)

Out[3]:

<matplotlib.image.AxesImage at 0x279508f14e0>

numpy中的名词(线代中的名称)

  • 1.一个整数 : 标量 纯量
  • 2.一维的数组 : 向量 矢量
  • 3.二维的数组 : 矩阵
  • 4.三维及其以上 : 张量

使用ndarray保存数据

数据库有瓶颈 MySQL IO操作的时候带来的

ndarray在速度上是一个整体存储的空间

In [30]:

 

#将其它的序列类型转变为ndarray类型
np.array('abc')

Out[30]:

array('abc', dtype='<U3')

In [25]:

 

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

Out[25]:

1

In [26]:

 

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

Out[26]:

1

In [28]:

 

#set类型是序列?不是
#无序的类型可以强制转换,但是不能使用
np.array({1,2,3,4,5})

Out[28]:

array({1, 2, 3, 4, 5}, dtype=object)

In [33]:

 

np.array({'a':1,'b':2})

Out[33]:

array({'a': 1, 'b': 2}, dtype=object)

In [34]:

 

#对于可迭代类型
np.array(range(10))

Out[34]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

引用传地址

但是引用传地址在ndarray中不能正常的使用

In [40]:

 

li_ = [1,2,3,4,5]

In [41]:

 

nd1 = np.array(li_)

In [42]:

 

display(li_,nd1)
[1, 2, 3, 4, 5]
array([1, 2, 3, 4, 5])

In [43]:

 

li_[0] = 0

In [44]:

 

display(li_,nd1)
[0, 2, 3, 4, 5]
array([1, 2, 3, 4, 5])

In [45]:

 

#拷贝传值
a=1
b=a
a=2
display(a,b)
2
1

In [46]:

 

#引用传地址
l1=[1,2,3]
l2=l1
l1[0] = 10
display(l1,l2)
[10, 2, 3]
[10, 2, 3]

ndarray的数据保存

In [51]:

 

#   name   sex   age  idCard  
#当前的数据是 4x4的矩阵 = 方阵
sign = np.array(['name','sex','age','idCard'])
arr = np.array([
    ['tom','male',18,123456],
    ['jack','male',18,123456],
    ['liye','male',18,123456],
    ['lijing','male',18,123456],
])

In [52]:

 

sign

Out[52]:

array(['name', 'sex', 'age', 'idCard'], dtype='<U6')

In [48]:

 

arr

Out[48]:

array([['tom', 'male', '18', '123456'],
       ['jack', 'male', '18', '123456'],
       ['liye', 'male', '18', '123456'],
       ['lijing', 'male', '18', '123456']], dtype='<U6')

ndarray的随机值

 

low   范围的最小值
high  范围的最大值
size  数组的形状
dtype 数据类型

In [85]:

 

#2行3列  tinyint uint8  0-255
# np.random.randint(-1000,1000,size=(2,3),dtype='uint8').itemsize
np.random.randint(-1000,1000,size=(2,3),dtype=int).itemsize

Out[85]:

8

 

#随机小数
#size 形状

In [90]:

 

np.random.random((5,5))

Out[90]:

array([[0.9710657 , 0.59959458, 0.17277926, 0.7564499 , 0.8199467 ],
       [0.05728386, 0.43645809, 0.55643072, 0.24820215, 0.64320721],
       [0.83246593, 0.46085084, 0.59217745, 0.64244586, 0.46066542],
       [0.73132308, 0.17251823, 0.92862237, 0.13484279, 0.94449531],
       [0.38324227, 0.21124364, 0.10590877, 0.85026129, 0.63822026]])

 

#randn  是生成一个 标准的正态分布的数组 , 中间值是0  均值是0   标准差值为1
 
#什么是正态分布?高斯分布
d0, d1, ..., dn  代表的是多少维度

In [95]:

 

np.random.randn(5,3)

Out[95]:

array([[-0.62357575,  1.15439985, -1.65257655],
       [ 1.97774917, -0.05774362, -0.77469661],
       [-1.65905117, -1.24069957,  0.87832254],
       [ 0.07512725,  0.00605548,  0.02697345],
       [ 0.22584547,  1.48109243, -1.10517901]])

 

#rand 只是用来生成一个随机的浮点数的

In [100]:

 

np.random.rand(5,3)

Out[100]:

array([[0.32596556, 0.16245572, 0.39403561],
       [0.11270325, 0.83104786, 0.77568375],
       [0.58643552, 0.26710588, 0.4707389 ],
       [0.43680775, 0.37349157, 0.41696032],
       [0.39967651, 0.69804483, 0.82111621]])

 

#normal 生成一个自定义正太分布的数组
loc=0.0    location 定位   中值
scale=1.0  波动 
size=None  数组的形状
超过波动范围的值是异常值

In [101]:

 

np.random.normal(100,10,10)

Out[101]:

array([ 97.1131475 , 107.82816673,  99.37605262, 104.48124786,
       110.60289338,  95.01571761, 100.66840617, 103.5317543 ,
        85.9189614 ,  92.54307587])

ndarray的属性

  • ndarray.shape 数组的形状
  • ndarray.ndim 数组的维度
  • ndarray.size 数组中元素的数量
  • ndarray.dtype 数组的数据类型
  • ndarray.itemsize 一个数组占用的字节数
  • ndarray.T 转制矩阵
  • ndarray.real 读取实数部分
  • ndarray.imag 读取虚数部分
  • ndarray.nbytes 用来计算数组的元素占用字节的总和
  • ndarray.strides 逐步输出数组占用的字节数

In [102]:

 

A = np.array([[1,2,3],[7,8,9]])
A

Out[102]:

array([[1, 2, 3],
       [7, 8, 9]])

In [103]:

 

A.T

Out[103]:

array([[1, 7],
       [2, 8],
       [3, 9]])

In [107]:

 

np.dot(A.T,A)

Out[107]:

array([[50, 58, 66],
       [58, 68, 78],
       [66, 78, 90]])

 

# real imag

In [110]:

 

res = np.full(shape=(2,3),fill_value=0.123+0.345j)

In [114]:

 

res.real

Out[114]:

array([[0.123, 0.123, 0.123],
       [0.123, 0.123, 0.123]])

In [116]:

 

res.imag

Out[116]:

array([[0.345, 0.345, 0.345],
       [0.345, 0.345, 0.345]])

 

#nbytes

In [126]:

 

o = np.ones(shape=(3,5),dtype=np.int8)

In [127]:

 

o

Out[127]:

array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]], dtype=int8)

In [128]:

 

o.shape

Out[128]:

(3, 5)

In [129]:

 

o.nbytes

Out[129]:

15

In [130]:

 

o.dtype

Out[130]:

dtype('int8')

In [133]:

 

#对原数据不产生影响
o = o.astype(np.float)

 

#strides

In [139]:

 

 
z = np.zeros(shape=(4,3))
z

Out[139]:

array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

In [140]:

 

z.itemsize

Out[140]:

8

In [141]:

 

z.nbytes

Out[141]:

96

In [142]:

 

#8指的是每一个元素所占用的字节数
#32 指的是行向量所占用的字节数
z.strides

Out[142]:

(24, 8)

np中的函数

  • np.dot() 矩阵乘法
  • np.full() 使用某一个制定的值填满数组
  • np.ones() 生成一个元素全部为1的数组
  • np.astype() 改变数组的数据类型
  • np.zeros() 生成一个元素全部为0的数组,如果生成的维度是二维的,那么这是一个'零矩阵'(相当于代数中0)
  • np.diag() 对角矩阵,主对角线上是有值,其它地方没有值
  • np.eye() I 单位矩阵,(相当于线代中的 1),主对角线上的值为1,其它的地方为0

In [161]:

 

#N 是 阶
#k = 2 代表对角线向上偏移两格位置
#k = -1 代表对角线向下偏移一格位置
I = np.eye(3)
I

Out[161]:

array([[0., 0., 0.],
       [0., 0., 0.],
       [1., 0., 0.]])

In [146]:

 

A = np.random.randint(1,10,(3,3))
A

Out[146]:

array([[4, 9, 7],
       [4, 6, 5],
       [9, 6, 5]])

In [148]:

 

np.dot(I,A)

Out[148]:

array([[4., 9., 7.],
       [4., 6., 5.],
       [9., 6., 5.]])

In [156]:

 

#v 代表对角线上的值,这个值必须是一个向量
np.diag([1,0.5,0.3])

Out[156]:

array([[1. , 0. , 0. ],
       [0. , 0.5, 0. ],
       [0. , 0. , 0.3]])

 

三角矩阵  上三角  下三角

In [168]:

 

a = np.eye(3,k=-2)
a

Out[168]:

array([[0., 0., 0.],
       [0., 0., 0.],
       [1., 0., 0.]])

In [167]:

 

b = np.eye(3,k=-1)
b

Out[167]:

array([[0., 0., 0.],
       [1., 0., 0.],
       [0., 1., 0.]])

In [166]:

 

c = np.eye(3)
c

Out[166]:

array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

In [169]:

 

a+b+c

Out[169]:

array([[1., 0., 0.],
       [1., 1., 0.],
       [1., 1., 1.]])

 

稀疏矩阵   希松  松散
大部分的值是0,小部分的位置有其它值的
文本处理

In [171]:

 

np.array([[0,0,0,1],[0,0,0,0],[0,2,0,0],[0,0,0,0]])

Out[171]:

array([[0, 0, 0, 1],
       [0, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 0, 0]])

numpy 中的聚合函数

  • np.sum() 求和
  • np.mean() 均值
  • np.max() 最大值
  • np.min() 最小值

 

axis参数  轴
axis = 0  行合并   y
axis = 1  列合并   x

In [177]:

 

np.ones(shape=(4,5)).sum(axis=1)

Out[177]:

array([5., 5., 5., 5.])

In [182]:

 

A = np.random.randint(1,10,(4,5))
A

Out[182]:

array([[6, 4, 4, 8, 3],
       [9, 1, 7, 6, 8],
       [8, 6, 9, 9, 2],
       [4, 2, 3, 2, 6]])

In [185]:

 

np.mean(A,axis=-1)  

Out[185]:

array([5. , 6.2, 6.8, 3.4])

使用聚合函数进行图片的灰度化

In [196]:

 

#3 rgb
lj.shape

Out[196]:

(483, 483, 3)

In [4]:

 

#黑白图片  还是二维的  透光率  jpg 0-255   png  0-1
#需要降低维度
#np.sum()  ndarray.sum()
#color  map
#bug jpg  0-255  [243,200,220]
plt.imshow(lj.sum(axis=2),cmap='gray')

Out[4]:

<matplotlib.image.AxesImage at 0x27950987588>

In [5]:

 

plt.imshow(lj.max(axis=-1),cmap='gray')

Out[5]:

<matplotlib.image.AxesImage at 0x279509e4400>

In [6]:

 

plt.imshow(lj.min(axis=-1),cmap='gray')

Out[6]:

<matplotlib.image.AxesImage at 0x27950a403c8>

In [7]:

 

plt.imshow(lj.mean(axis=-1),cmap='gray')

Out[7]:

<matplotlib.image.AxesImage at 0x27950bcef60>

In [ ]:

 

In [ ]:

 

In [8]:

 

plt.imshow(lj)

Out[8]:

<matplotlib.image.AxesImage at 0x27950aa7940>

In [12]:

 

plt.imshow(lj[0:300,60:280])

Out[12]:

<matplotlib.image.AxesImage at 0x27951d5ab70>

In [ ]:

 

In [ ]:

 

In [ ]:

 

In [ ]:

 

In [ ]:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值