numpy python2_python-numpy(2)

接着上一部分

# 开头我就在说numpy是python 的一个科学计算包,具体体现在哪呢?

# 用下面的例子看一下

a = [[1, 2, 3], [5, 7, 8], [4, 5, 6]]

b = [[6, 2, 1], [2, 3, 1], [4, 5, 6]]

# 需求;比如我想把上边的a,b相加怎样做

# 第一种做法:python 原生态做法

# 我们现根据列表的形状,创建一个空数组用于接收结果

c=[[0,0,0],[0,0,0],[0,0,0]]

for i in range(3):

for j in range(3):

c[i][j]=a[i][j]+b[i][j]

print(c)

[[7, 4, 4], [7, 10, 9], [8, 10, 12]]

# 第二种做法:

a1=np.array(a)

a2=np.array(b)

c1=a1+a2

print(c)

c1 # 这个时候还是数组

c2=c1.tolist() # 数组转换为列表

c2

# 对比两种做法,numpy 更加块,更加简洁

[[7, 4, 4], [7, 10, 9], [8, 10, 12]]

[[7, 4, 4], [7, 10, 9], [8, 10, 12]]

# Numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下

print(a1-a2)

print(a1*a2)

print(a1/a2)

print(a1//a2)

# 数组之间的运算,

# 第一种情况是,两个数组的形状相同,对应位置相加,减,乘除,求余

# 第二种情况要是形状不相同呢?

# 先看一个例子

a1=np.arange(3)

b1=np.ones((3,3)) # 先不用了解ones,这个主要看原理

c1=np.ones((3,1))

print(a1+5)

print()

print(b1+a1)

print()

print(a1+c1)

# 我们可以看到,数组a1,每个元素都+5,这是为什么呢,这个时候就有一个广播机制

# 广播机制:当把一个低维和一个高维数据进行计算时,会自动将低维数据拉伸到和高维相同的形状,然后进行对应元素位置操作

# 其他运算

a1=np.arange(3)

b1=np.ones((3,3))

c1=np.ones((3,1))

print(a1,b1,c1)

print()

print(a1**2) # 平方

print(np.sqrt(a1)) # 开方

print(np.exp(a1)) # 指数

print(np.log(a1)) # 对数

# 常用的简单的运算函数

ar=np.arange(3)

print(ar.mean()) # 求平均值

print(ar.max()) # 求最大值

print(ar.min()) # 求最小值

print(ar.std()) # 求标准差

print(ar.var()) # 求方差

print(ar.sum()) # 求和

1.0

2

0

0.816496580927726

0.6666666666666666

3

小练习

一家连锁店,A门店最近5天的营业额数据为: 1200,1398,2200,1100,1521

B门店5天营业额为: 1340,1211,1460,1121,1609

计算连锁店每天的总收入

计算连锁店5天的总收入

计算A店和B店的销售额的对数差

(不做)计算A店和B店每天销售量更高的是哪个店?

创建常用数组

### 创建一个全0数组,默认float型

# 语法:np.ones(shape,dtype) shape:形状

a1=np.ones(1) # 一维的

a2=np.ones((1,1)) # 二维以上写(),[]都可以,shape的第一个参数可以理解为几行,第二个参数为几列

a3=np.ones([1,2])

print(a1,a2,a3,sep="\n")

print()

a4=np.ones((2,3,4))

print(a4)

# 三维理解:

# 第一个数2:三维中有2个二维平面构成三维体

# 3:每个二维元素由3个一维元素组成

# 4 :每个一维元素由4个0位元素组成

a5=np.ones_like(a4)

print(a5)

# 返回具有与给定数组相同的形状和类型的零数组

# 创建一个全是1的数组,跟ones 一模一样

# 语法:np.zeros(shape,dtype) ,默认输出也是float型的,也可以指定类型,不说

a1=np.zeros(1) # 一维的

a2=np.zeros((1,1))

a3=np.zeros([1,2])

print(a1,a2,a3,sep="\n")

print()

a4=np.zeros((2,3,4))

print(a4)

print()

a5=np.zeros_like(a4)

print(a5)

# 创建单位矩阵

# np.eye(n,m,k) n:行,m:列,k:偏移量,m=n 可以不用写

# 创建一个单位矩阵,对角线值为1,其余为0

a=np.eye(5) # 只有一个参数时,#创建一个正方的N*N的单位矩阵,对角线值为1,其余为0

a1=np.eye(4,3) # 这个跟ones,zeros,创建数组形状不一样

print(a,a1,sep="\n")

print()

a2=np.eye(4,4,-1) # k<0:代表对角线向下移,>0 :代表向上移

print(a2)

# 创建等差数组

# 语法:linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None):返回在间隔上计算的num个均匀间隔的样本。默认返回float

# start:起始值,stop:结束值

# num:生成样本数,默认为50

# endpoint:如果为真,则停止是最后一个样本。否则,不包括在内。默认值为True。

# retstep:如果为真,返回(样本,步长),其中步长是样本之间的间距 → 输出为一个包含2个元素的元祖,第一个元素为array,第二个为步长实际值

print(np.linspace(1,10,4) )#

print()

print(np.linspace(1,10,4,endpoint=False))

print(np.linspace(1,10,4,retstep=True))

[ 1. 4. 7. 10.]

[1. 3.25 5.5 7.75]

(array([ 1., 4., 7., 10.]), 3.0)

from IPython.core.interactiveshell import InteractiveShell

InteractiveShell.ast_node_interactivity = "all"

#choice 从一维数组中生成随机数

# 第一参数是一个1维数组,如果只有一个数字那就看成range(5)

# 第二参数是维度和元素个数,一个数字是1维,数字是几就是几个元素

# 比如:a = np.random.choice(5,3) print(f'从range(5)中拿随机数,生成只有3个元素的一维数组是:{a}')

arr1=np.random.choice(5,3)

arr1

arr2=np.random.choice(6,(2,3))

arr2

arr3=np.random.choice([1,2,77,55],2)

arr3

arr2

np.random.shuffle(arr2) # 打乱顺序

arr2

### 小练习:

1. 生成一个6行6列的单位矩阵数组,数据类型为字符串

2. 生成一个(2,3,4)的数组,并使用无穷大进行填充

3. 生成5,15的随机整数数组,形状为(3,6)

4. 生成3行4列的标准正态分布数组

5. 生成均值为10,标准差为5的(7,3)的正太分布

6. 生成从12到22,步长为2的序列

7. 生成从12到22的序列,序列的长度为100个

继续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值