学习numpy快速入门教程 心得体会(2)

一、基础操作

1.支持加减乘除乘方和比较运算

import numpy as np
a = np.array([20, 30, 40, 50])
b = np.array([2, 3, 4, 5])
c = a + b  #加法运算
d = a - b  #减法运算
e = a * b  #乘法运算
f = a / b  #除法运算
g = b**2   #乘方运算
h = a > 35 #比较运算
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)

得到:

[22 33 44 55]
[18 27 36 45]
[ 40  90 160 250]
[10. 10. 10. 10.]
[ 4  9 16 25]
[False False  True  True]

2.矩阵运算

与许多其他的矩阵语言不同,numpy中 * 符号表示矩阵中的元素对应相乘,@才是代表矩阵运算符

import numpy as np
a = np.array([[1, 1], [0, 1]])
b = np.array([[2, 0], [3, 4]])
print(a*b)
print(a@b)

得到:

[[2 0]
 [0 4]]
[[5 4]
 [3 4]]
3.某些操作(+=,-=,*=)会直接改变被操作的矩阵数组而不会再创建新的矩阵数组

import numpy as np
a = np.ones((3, 3), dtype=int)  #限定了a为整数类型的数组
b = np.random.random((3, 3))    
print(a)
print(b)
b += a
print(b)

得到:

[[1 1 1]
 [1 1 1]
 [1 1 1]]
[[0.48554323 0.49411207 0.06774223]
 [0.8745072  0.31606328 0.86847432]
 [0.41653477 0.35033241 0.12665751]]
[[1.48554323 1.49411207 1.06774223]
 [1.8745072  1.31606328 1.86847432]
 [1.41653477 1.35033241 1.12665751]]

注意:上述操作中b+=a是可以的,但对于a+=b的操作是会报错的,因为a数组的类型为int类(不能用来表示float类的元素)

4.当使用不同类型的数组进行操作时,结果数组的类型对应于更一般或更精确的数组(称为向上转换的行为)。这与c语言中的不同数据类型间的运算规则类似,都是向上转换。

5.通过指定axis 参数,可以沿数组的指定轴应用操作

通常情况下,axis = 0时,进行的是列操作,axis = 1时,进行的是行操作。

import numpy as np
a = np.arange(12).reshape(3, 4)
print(a)
print(a.sum(axis=0)) #每列求和
print(a.sum(axis=1)) #每行求和
print(a.min(axis=0)) #每列的最小值
print(a.max(axis=1)) #每行的最大值

得到:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[12 15 18 21]
[ 6 22 38]
[0 1 2 3]
[ 3  7 11]

二、通函数(通用函数)

numpy给我们提供了功能类似math库中的大量通用函数如:sin(),cos(),exp(),sqrt()

import numpy as np
a = np.array([0, 1, 2])
print(a)
print(np.exp(a))
print(np.sqrt(a))
print(np.sin(a))

得到:

[0 1 2]
[1.         2.71828183 7.3890561 ]
[0.         1.         1.41421356]
[0.         0.84147098 0.90929743]

三、切片,索引,迭代

1.python最独特的功能便是切片了,numpy也不例外。对于一维数组,索引,切片,迭代这些操作与python中的序列类似。

import numpy as np
a = np.arange(10)**2
print(a[2])
print(a[2:5])
print(a[:6:2])  #索引从0开始,到6(不取),间隔为2
print(a[::-1])  #将数组倒置
for i in a:
    print(i**(1/2.))  #对数组a中的元素进行迭代

得到:

4
[ 4  9 16]
[ 0  4 16]
[81 64 49 36 25 16  9  4  1  0]
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0

2.对于多维数组,每个轴可以有一个索引,这些索引以逗号​​分隔的元组给出。

import numpy as np
def f(x, y):
    return 5*x+y
a = np.fromfunction(f,(5, 5), dtype=int)  #先创建一个新数组
print(a)
print(a[2, 3])   #第三行第四列的元素
print(a[0:3, 1]) #第一行到第三行且位于第二列的所有元素
print(a[:, 1])   #所有行且位于第二列的所有元素
print(a[1:3, :]) #第二行到第三行且处在所有列的元素

得到:

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
13
[ 1  6 11]
[ 1  6 11 16 21]
[[ 5  6  7  8  9]
 [10 11 12 13 14]]

3.对于多维数组,三个点( ... )表示产生完整索引元组所需的冒号。

例如,如果 x 是rank为5的数组(即,它具有5个轴),则:

   x[1,2,...] 相当于 x[1,2,:,:,:]

   x[...,3] 等效于 x[:,:,:,:,3]

   x[4,...,5,:] 等效于 x[4,:,:,5,:]

4.对于多维数组,迭代是相对于第一个轴而言的

for row in a:
    print(row)

[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值