栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Numpy 学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Numpy 学习笔记

  1. 数组的创建
import numpy as np


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

# 形状
print(x.shape)
print(X.shape)
# 维度
print(x.ndim)
print(X.ndim)
# 元素个数
print(x.size)
print(X.size)
# 数据类型
print(x.dtype)
print(X.dtype)
(8,)
(2, 4)
1
2
8
8
int32
int32

2.创建array的一些便捷函数:

arange(startNum,endNum,steplength,dtype=None)

x = np.arange(10)
X = np.arange(1, 10, 2, dtype='float32')
print(x)
print(X)
[0 1 2 3 4 5 6 7 8 9]
[1. 3. 5. 7. 9.]

ones(shape,dtype=None,order = 'C')

x = np.ones(5,dtype='int32')
X = np.ones((2,3), dtype='float32')

print(x)
print(X)

结果如下:

[1 1 1 1 1]

[[1. 1. 1.]
 [1. 1. 1.]]

 ones_like(array,dtype='float',order = 'C')

创建一个和 array形状一样的新数组

x1 = np.ones_like(x,dtype=float)

[1. 1. 1. 1. 1.]

zeros()

zeros_like()

empty():创建全为零的空数组,数据未初始化不要用

empty_like()

full(shape,num,dtype=None):数组里面数据全为num

full_like(array,num,dtype=None)

x = np.full(4,5)
x1 = np.full_like(x,6)

print(x)
print(x1)

结果如下:

[5 5 5 5]
[6 6 6 6]

 np.random.randn(d0,d1,...,dn):dk表示维度

x1 = np.random.randn()
x2 = np.random.randn(2)
x3 = np.random.randn(2,3)

print(x1)
print(x2)
print(x3)
-0.8884917348821152
[-0.75606673  0.00434954]
[[-1.29902618 -0.77021982 -0.26975532]
 [-0.29984148  0.09659716 -0.93599409]]

3、array本身支持的大量操作和函数

一下操作都是 elementwise的:

A = np.arange(10).reshape(2,5)
print(A)
print(A.shape)
print(A+1)
print(A*3)
print(np.sin(A))
print(np.exp(A))
B = np.random.randn(2,5)
print(A+B)

结果如下:
[[-0.28060406  1.27730837  0.99342338  3.33554666  3.75335682]
 [ 5.26228444  5.1825406   6.75159336  7.92368786  9.00068879]]

 4、利用numpy对数组按索引查询

基础索引:

A = np.arange(20).reshape(4,5)
print(A)
print(A[2]) # 第三行
print(A[:1,2:])
A[:2,:3] = 666
print(A)

结果如下:

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

[10 11 12 13 14]

[[2 3 4]]

[[666 666 666   3   4]
 [666 666 666   8   9]
 [ 10  11  12  13  14]
 [ 15  16  17  18  19]]

神奇索引:

A = np.arange(10)
print(A)
print(A[[0,3,9]])
index = np.array([[0,3,1],[2,4,8]])
print(A[index])

结果如下:

[0 1 2 3 4 5 6 7 8 9]

[0 3 9]

[[0 3 1]
 [2 4 8]]

举例:

求得数组中最大的前三个数值:

# 产生十个随机数
arr = np.random.randint(1,100,10)
print(arr)
# 对arr进行有小到大排序,并返回索引
print(arr.argsort())
print(arr[arr.argsort()[-3:]])

结果如下:

[21 91 97  8 13 96 72 14 79 62]
[3 4 7 0 9 6 8 1 5 2]
[91 96 97]

 示例2:

A = np.arange(20).reshape(4, 5)
print(A)
print(A[0])
print(A[0, :])
print(A[[1, 3]])
print(A[[0, 2, 3], [1, 3, 4]])

结果如下:

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

[0 1 2 3 4]
[0 1 2 3 4]

[[ 5  6  7  8  9]
 [15 16 17 18 19]]
[ 1 13 19]

布尔索引:

示例1

A = np.arange(10)
print(A)
print(A>5)
print(A[A>5])

结果如下:

[0 1 2 3 4 5 6 7 8 9]
[False False False False False False  True  True  True  True]
[6 7 8 9]

 示例2:

arr = np.arange(20).reshape(4,5)
print(arr)
# 返回第三列元素大于5 的行
print(arr[:,3]>5)
print(arr[arr[:,3]>5])

结果如下:

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

[False  True  True  True]

[[ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

示例3:

arr = np.arange(20).reshape(4,5)
print(arr)
condition = (arr%2==0) | (arr>15)
print(arr[condition])

结果如下:

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

[ 0  2  4  6  8 10 12 14 16 17 18 19]

5、random中常用的随机函数

np.random.seed(666)

x1 = np.random.rand(3,4)
x2 = np.random.randn(5)
x3 = np.random.randint(0,10,3)
x4 = np.random.randint(0,10,size=(2,3))
x5 = np.random.choice(x3,2)
x6 = np.random.choice(6,(2,3))  ---> 从 range(6)中随机选出(2,3)数组
x1 = np.arange(10)
# 随机打散 返回值为 None,改变了原来的数组
np.random.shuffle(x1)
print(x1)

x2 = np.arange(20).reshape(4,5)
# 随机打散行,列不变
np.random.shuffle(x2)
print(x2)
x1 = np.arange(10)
# 随机打散 返回了一个新的数组,原来的数组不变
print(np.random.permutation(x1))
print(x1)

x2 = np.arange(4).reshape(2,2)
print(np.random.permutation(x2))
print(x2)

 结果如下:

[7 0 6 8 5 3 9 2 1 4]
[0 1 2 3 4 5 6 7 8 9]
[[2 3]
 [0 1]]
[[0 1]
 [2 3]]

 

# 均值为 1 ,方差为5 的(1,10)维高斯分布数组
x1 = np.random.normal(1,5,10)
print(x1)

x2 = np.random.normal(2,4,(2,5))
print(x2)
# 1-10之间的均匀分布 的(1,10)维数组
x1 = np.random.uniform(1,5,10)
print(x1)

x2 = np.random.uniform(2,4,(2,5))
print(x2)

 示例:

import numpy as np
import matplotlib.pylab as plt

# 均匀生成 -10 - 10 之间100个数
x = np.linspace(-10,10,100)
y = np.sin(x)
plt.plot(x,y)
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号