1h About Numpy

1h About Numpy

How are lists different from Numpy?

Numpy is faster than list, because the numpy use

continue memory.

lists 中的信息会分布散落在内存中,如果信息是不相邻的话,你必须弹跳,

快速遍历潜在地所有对象上执行功能

numpy 使用的是连续内存,

在这里插入图片描述
在这里插入图片描述

例子:

import numpy as np
a = np.array ([1,3,5])
b = np.array ([1,2,3])
a*b
array([ 1, 6, 15])

1 * 1, 3 * 2 , 5 * 3 —> 1 , 6 , 15 GET

b= np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(b)
[[[1 2]
[3 4]]

[[5 6]
[7 8]]]

b[0,1,:]
array([3, 4])

b[::-1] #数组倒序

Numpy Ndarray 对象

ndarray 对象是用于存放同类元素的多维数组

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度

Numpy 数组属性

ndarray.ndim秩,即轴的数量或维度的数量
ndarray.shape数组的维度,对于矩阵,n 行 m 列

** 从数值范围创建数组

numpy.arange( start , stop , step . dtype)
start起始值,默认为0
stop终止值(不包含)
step步长,默认为1
dtype返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。

** 创建一个一维数组 [等差数列]

np,linspace( start , stop , num = 50 , endpoint = True , restep = False , dtype = None)
start序列的起始值
stop序列的终止值,如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep如果为 True 时,生成的数组中会显示间距,反之不显示。
dtypendarray 的数据类型

** 创建等比数列

np.logspace( start , stop , num = 50 , endpoint = True , base = 10.0 , dtype = None)

** 切片

冒号分隔切片参数 start:stop:step

切片还可以包括省略号 … ,来选择元组的长度与数组的维度相同。如果再行位置使用省略号,它将包含行中元素的ndarray

import numpy as np
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print (a[...,1])   # 第2列元素
print (a[1,...])   # 第2行元素
print (a[...,1:])  # 第2列及剩下的所有元素

**索引

用 ~ (取补运算符)过滤NAN

a = np.array([np.nan,  1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])

过滤掉非复数元素

a1 =  np.array([1,  2+6j,  5,  3.5+5j])
print(a1[np.iscomplex(a1)])

numpy迭代器对象: numpy nditer

b = np.arange(0 ,60 ,5)
b = b.reshape( 3,4 )
print(b)
print(b.T ) #打印转置

##列序优先
for x in np.nditer( b , order= 'F'):
    print(x , end= ',')
print('\n')
##行序优先
for x in np.nditer( b.T , order= 'F'):
    print(x , end= ',')

Nmupy 数组操作

修改数组形状
函数描述
reshape不改变数据的条件下修改形状
flat数组元素迭代器
flatten返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
ravel返回展开数组

**numpy.ndarray.flat 数组元素迭代器

d = np.arange(9).reshape( 3 , 3)
print('原始数组')
for row in d:
    print(row)

print('迭代后数组')
for element in d.flat:
    print(element)
翻转数组
函数描述
transpose对换数组的维度
ndarray.Tself.transpose() 相同
rollaxis向后滚动指定的轴
swapaxes对换数组的两个轴

numpy.transpose 用于对换数组的维度 相当于 numpy.ndarray.T

修改数组维度
维度描述
broadcast产生模仿广播的对象
broadcast_to将数组广播到新形状
expand_dims扩展数组的形状
squeeze从数组的形状中删除一维条目

** numpy.broadcast 用于模仿广播的对象,它返回一个对象 该对象封装了将一个数组广播到另一个数组的结果

该函数使用两个数组作为输入参数

import numpy as np
 
x = np.array([[1], [2], [3]])
y = np.array([4, 5, 6])  
 
# 对 y 广播 x
b = np.broadcast(x,y)  
# 它拥有 iterator 属性,基于自身组件的迭代器元组
 
print ('对 y 广播 x:')
r,c = b.iters
 
# Python3.x 为 next(context) ,Python2.x 为 context.next()
print (next(r), next(c))
print (next(r), next(c))
print ('\n')
# shape 属性返回广播对象的形状
 
print ('广播对象的形状:')
print (b.shape)
print ('\n')
# 手动使用 broadcast 将 x 与 y 相加
b = np.broadcast(x,y)
c = np.empty(b.shape)
 
print ('手动使用 broadcast 将 x 与 y 相加:')
print (c.shape)
print ('\n')
c.flat = [u + v for (u,v) in b]
 
print ('调用 flat 函数:')
print (c)
print ('\n')
# 获得了和 NumPy 内建的广播支持相同的结果
 
print ('x 与 y 的和:')
print (x + y)
分割数组
函数数组及操作
split将一个数组分割为多个子数组
hsplit将一个数组水平分割为多个子数组(按列)
vsplit将一个数组垂直分割为多个子数组(按行)

** numpy.split

numpy.split(ary, indices_or_sections, axis)

indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

e = np.split(np.arange(9) ,[4,7]) #在 ,4和7的地方分开
f = np.split(np.arange(9) ,3) 
数组元素的添加与删除
函数元素及描述
resize返回指定形状的新数组
append将值添加到数组末尾
insert沿指定轴将值插入到指定下标之前
delete删掉某个轴的子数组,并返回删除后的新数组
unique查找数组内的唯一元素

** numpy.append

在数组的末尾添加值。追加的操作会分配给整个数组

numpy.append(arr, values, axis=None)
c = np.array([[1,1 ,1],[2,2,2],[3,3,3]])
f = np.append(c, [7,8,9])
f1 = np.append(c, [[7,8,9]], axis = 0)
f2 = np.append(c, [[4,0,4],[7,8,9],[5 ,0,5]], axis = 1)
print(f)
print(f1)
print(f2)

Numpy 字符串函数

在字符数组类(numpy.char)中定义

函数描述
add()对两个数组的逐个字符串元素进行连接np.char.add([‘add’],[‘add’])
multiply()返回按元素多重连接后的字符串np.char.multiply('Runoob ',3)
center()居中字符串np.char.center(‘Runoob’, 20,fillchar = ‘*’)
capitalize()将字符串第一个字母转换为大写np.char.capitalize(‘runoob’)
title()将字符串的每个单词的第一个字母转换为大写np.char.title(‘runoob’)
lower()数组元素转换为小写
upper()数组元素转换为大写np.char.upper(‘runoob’)
split()指定分隔符对字符串进行分割,并返回数组列表np.char.split (‘www.runoob.com’, sep = ‘.’)
splitlines()返回元素中的行列表,以换行符分割np.char.splitlines(‘i\nlike runoob?’)
strip()移除元素开头或者结尾处的特定字符# 移除字符串头尾的 a 字符 print (np.char.strip(‘ashok arunooba’,‘a’)) # 移除数组元素头尾的 a 字符 print (np.char.strip([‘arunooba’,‘admin’,‘java’],‘a’))
join()通过指定分隔符来连接数组中的元素#操作字符串 print (np.char.join(’:’,‘runoob’))# 指定多个分隔符操作数组元素print (np.char.join([’:’,’-’],[‘runoob’,‘google’]))
replace()使用新字符串替换字符串中的所有子字符串
decode()数组元素依次调用str.decode
encode()数组元素依次调用str.encode

Nmupy 数学函数

** 三角函数 sin() cos() tan() arcsin( ) arccos() arctan()

** numpy.degrees() 将角度转化为弧度

Nmupy 算术函数

Numpy排序、条件刷选函数

种类速度最坏情况工作空间稳定性
'quicksort'(快速排序)1O(n^2)0
'mergesort'(归并排序)2O(n*log(n))~n/2
'heapsort'(堆排序)3O(n*log(n))0

** numpy.sort( ) 返回输入数组的排序副本。

** numpy.argsort( ) 数组值从小到大的索引值

详细描述-> 链接: https://www.runoob.com/numpy/numpy-sort-search.html

numpy.lexsort()

numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。

这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列

NumPy 线性代数

NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明:

函数描述
dot两个数组的点积,即元素对应相乘。
vdot两个向量的点积
inner两个数组的内积
matmul两个数组的矩阵积
determinant数组的行列式
solve求解线性矩阵方程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值