Numpy包的一些简单使用

一、安装

Windows安装:

pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

二、Numpy使用

使用要先导入包

import numpy as np

2.1. numpy的基础

# 创建一个数组
array01 = np.array([[1, 2, 3], [1, 2, 3]])
# 打印后没有逗号来分隔列表
print("array01", array01)
# 结果
array01 [[1 2 3]
 [1 2 3]]
# 数组的维度
print("number of dim:", array01.ndim)
# 结果
number of dim: 2
# 数组的行和列(形状)
print("shape", array01.shape)
# 结果
shape (2, 3)
# 数组元素的总个数,相当于 .shape 中 n*m 的值
print("size", array01.size)
# 结果
size 6
# dtype:对象的元素类型
array02 = np.array([1, 2, 3], dtype=int)
# 打印矩阵的类型
print(array02.dtype)
# 结果
int32
# 打印一个全部为0的矩阵,参数为矩阵的shape,要用()或[]的形式填写
# array03 = np.zeros((3, 3))
array03 = np.zeros([3])
print("array03", array03)
# 结果
array03 [0. 0. 0.]
print(array03.dtype)
# 结果
float64
# 打印一个全部为1的矩阵,参数为矩阵的shape,要用()或[]的形式填写
array04 = np.ones((3, 3))
print("array04", array04)
# 结果
array04 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
print(array04.dtype)
# 结果
float64
# 打印一个未初始化的数组,参数为矩阵的shape,要用()或[]的形式填写,打印出的数是一个无限接近0的数
array05 = np.empty((3, 3), dtype=float, order='C')
print("array05", array05)
# 结果
array05 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
print(array05.dtype)
# 结果
float64
# 打印一个有序数组,数组的值是从0到11
array06 = np.arange(12)
print("array06", array06)
# 结果
array06 [ 0  1  2  3  4  5  6  7  8  9 10 11]
# 打印一个有序数组,数组的值是从2到20,步长为3
array07 = np.arange(2, 21, 3)
print("array07", array07)
# 结果
array07 [ 2  5  8 11 14 17 20]
# 打印一个有序数组,数组的值是从2到100,步长为3,重新定义shape
array08 = np.arange(2, 101, 3).reshape((3, 11))
print("array08", array08)
# 结果
array08 [[ 2  5  8 11 14 17 20 23 26 29 32]
 [35 38 41 44 47 50 53 56 59 62 65]
 [68 71 74 77 80 83 86 89 92 95 98]]
# numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的
# 也可以reshape
array09 = np.linspace(1, 10, 3)
print("array09", array09)
# 结果
array09 [ 1.   5.5 10. ]

2.2. numpy基础运算

# 相减,相减的两个数组shape要一致
array01 = np.array([1, 2, 3, 4, 5, 6, 7])
array02 = np.arange(7)
array03 = array02 - array01
print(array03)

# array01 [1 2 3 4 5 6 7]
# array02 [0 1 2 3 4 5 6]
# 结果
[-1 -1 -1 -1 -1 -1 -1]
# 相加,相加的两个数组shape要一致
array01 = np.array([1, 2, 3, 4, 5, 6, 7])
array02 = np.arange(7)
array03 = array02 + array01
print(array03)

# array01 [1 2 3 4 5 6 7]
# array02 [0 1 2 3 4 5 6]
# 结果
[ 1  3  5  7  9 11 13]
# 平方/幂
array01 = np.arange(7)
array02 = array01 ** 2
print("array02", array02)

# array01 [0 1 2 3 4 5 6]
# 结果
array02 [ 0  1  4  9 16 25 36]
# sin/cos
array01 = np.arange(7)
array02 = np.sin(array01)
print("array02", array02)

# array01 [0 1 2 3 4 5 6]
# 结果
array02 [ 0.          0.84147098  0.90929743  0.14112001 -0.7568025  -0.95892427
 -0.2794155 ]
# 打印多少个值小于3
array01 = np.arange(7)
print(array01 < 3)

# array01 [0 1 2 3 4 5 6]
# 结果
[ True  True  True False False False False]
# 就是说如果小于3,对应的位置是True,如果不是,则是False
# 逐个相乘
array01 = np.arange(7)
array02 = np.arange(7)
print(array01 * array02)

# array01 [0 1 2 3 4 5 6]
# array02 [0 1 2 3 4 5 6]
# 结果
[ 0  1  4  9 16 25 36]
# 矩阵乘法
array01 = np.arange(7)
array02 = np.arange(7)
# 以下两种写法作用相同
print(np.dot(array01, array02))
print(array01.dot(array02))

# array01 [0 1 2 3 4 5 6]
# array02 [0 1 2 3 4 5 6]
# 结果
91
91
# 随机生成
# random括号中是矩阵的shape
array01 = np.random.random((2, 4))
print(array01)

# 结果
[[0.49041883 0.65577959 0.0749789  0.25122033]
 [0.63311773 0.91115967 0.51406456 0.04068049]]
# 数组的总和
print(np.sum(array01))

# array01 
# [[0.49041883 0.65577959 0.0749789  0.25122033]
# [0.63311773 0.91115967 0.51406456 0.04068049]]
# 结果
3.571420117123375
# 数组的最大值
print(np.max(array01))

# array01 
# [[0.49041883 0.65577959 0.0749789  0.25122033]
# [0.63311773 0.91115967 0.51406456 0.04068049]]
# 结果
0.9111596735272833
# 数组的最小值
print(np.min(array01))

# array01 
# [[0.49041883 0.65577959 0.0749789  0.25122033]
# [0.63311773 0.91115967 0.51406456 0.04068049]]
# 结果
0.04068048917507383
# 指定维度axis,max、min、sum同理
# axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值,也就是每一行会有一个最值,有多少行就有多少最值
print(np.max(array01, axis=1))

[0.65577959 0.91115967]
A = np.arange(2, 14).reshape((3, 4))
# 最小值的索引
print(np.argmin(A))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
0
# 打印平均值
print(np.mean(A))
print(A.mean())
print(np.average(A))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
7.5
7.5
7.5
# 中位数
print(np.median(A))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
7.5
"""
累加
0100numpy.cumsum(a, axis=None, dtype=None, out=None)
axis=0,按照行累加。
axis=1,按照列累加。
axis不给定具体值,就把numpy数组当成一个一维数组。
第一位输出A数组的第一位,第二位是A数组的第一位+第二位,第三位是A数组的第一位+第二位+第三位,以此类推。。。
"""
print(np.cumsum(A))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
[ 2  5  9 14 20 27 35 44 54 65 77 90]
"""
累差
后一个元素减去前一个元素
"""
print(np.diff(A))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
[[1 1 1]
 [1 1 1]
 [1 1 1]]
# 原来矩阵一行是四个数,计算结果一行为三个数
"""
找出非零的数
输出结果如下
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
会输出两个数组,第一个数组代表所有不为零的横坐标,第二个数组是纵坐标,对照着看
也就是说,A数组,所有不为零的数的下标为(0,0),(0,1),(0,2),(0,3),(1,0)....
"""
print(np.nonzero(A))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
# 反向,行变成列,列变成行
# 使用的时候数组必须是二维的,如果是一维的是没有用的
print(np.transpose(A))
print(A.T)

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]

[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
# clip
# 所有小于5的数都变成是5,所有大于9的数字都变为9
print(np.clip(A, 5, 9))

# A
# [[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]
# 结果
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]
# 排序
B = np.random.random((3, 5))
print(B)
print(np.sort(B))
"""
计算的时候可以指定是对于行计算还是对于列计算
axis=0,按照行计算
axis=1,按照列计算
"""
# 结果
[[0.70056206 0.08774181 0.74982551 0.06551736 0.18228322]
 [0.91882845 0.95398492 0.68164948 0.12950223 0.17427662]
 [0.39897969 0.1183171  0.05720491 0.8894308  0.81844583]]

[[0.06551736 0.08774181 0.18228322 0.70056206 0.74982551]
 [0.12950223 0.17427662 0.68164948 0.91882845 0.95398492]
 [0.05720491 0.1183171  0.39897969 0.81844583 0.8894308 ]]

2.3. numpy的索引

A = np.arange(3, 15)
print(A[2])

# A [ 3  4  5  6  7  8  9 10 11 12 13 14]
# 结果
5
B = np.arange(3, 15).reshape((3, 4))
print(B[2])

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
[11 12 13 14]
# 以下两种方式等同
print(B[2][1])
print(B[2, 1])

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
12
12
# 代表第三行的所有数
print(B[2, :])

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
[11 12 13 14]
# 第二列的所有数
print(B[:, 1])

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
[ 4  8 12]
# 代表第二行的第二到第四个数(包含第二个数,不包含第四个数)
print(B[1, 1:3])

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
[8 9]
# 循环
# 打印每一行
for row in B:
    print(row)

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]

# 没有迭代列,但是可以通过迭代B的transpose的行,达到迭代B的列的目的
print(B.T)
# 结果
[[ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]
 [ 6 10 14]]

for column in B.T:
    print(column)

# 结果
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]

print(B.flat)
print(B.flatten())

# 结果
<numpy.flatiter object at 0x000001D590A53C60>

[ 3  4  5  6  7  8  9 10 11 12 13 14]
# 打印B元素的每一项
for item in B.flat:
    print(item)

# B
# [[ 3  4  5  6]
# [ 7  8  9 10]
# [11 12 13 14]]
# 结果
3
4
5
6
7
8
9
10
11
12
13
14

2.4. numpy数组的合并

A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
# 上下合并,就是把A和B合并成一个2*3的二维数组
C = np.vstack((A, B))
print(C.shape)

# A [1 1 1]
# B [2 2 2]
# C 
# [[1 1 1]
# [2 2 2]]
# 结果
(2, 3)
# 左右合并
D = np.hstack((A, B))
print(D.shape)

# A [1 1 1]
# B [2 2 2]
# D [1 1 1 2 2 2]
# 结果
(6,)
"""
为数组多加一个轴
可以把[1,1,1]的数组变为
[[1]
 [1]
 [1]]
"""
print(A[:, np.newaxis])

# A [1 1 1]
# 结果
[[1]
 [1]
 [1]]
A = np.array([1, 1, 1])[:, np.newaxis]
B = np.array([2, 2, 2])[:, np.newaxis]
C = np.vstack((A, B))
print(C.shape)

# A 
# [[1]
# [1]
# [1]]

# B
# [[2]
#  [2]
#  [2]]

# C
# [[1]
#  [1]
#  [1]
#  [2]
#  [2]
#  [2]]

# 结果
(6, 1)
D = np.hstack((A, B))
print(D.shape)

# A 
# [[1]
# [1]
# [1]]

# B
# [[2]
#  [2]
#  [2]]

# D
# [[1 2]
#  [1 2]
#  [1 2]]

# 结果
(3, 2)
# 多个数组合并
print(np.concatenate((A, B, A, B, B), axis=0))
print(np.concatenate((A, B, A, B, B), axis=1))

# 结果
[[1]
 [1]
 [1]
 [2]
 [2]
 [2]
 [1]
 [1]
 [1]
 [2]
 [2]
 [2]
 [2]
 [2]
 [2]]

[[1 2 1 2 2]
 [1 2 1 2 2]
 [1 2 1 2 2]]

2.5. numpy数组分割

A = np.arange(12).reshape((3, 4))
print(A)

# 结果
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
# 1为纵向分割,分割成2等段
print(np.split(A, 2, axis=1))

# A
# [[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]
# 结果
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
# 0为横向分割,分割成3等段
print(np.split(A, 3, axis=0))

# A
# [[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]
# 结果
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
# 不等量的分割
# 纵向分割,分割成不等的3段
print(np.array_split(A, 3, axis=1))

# A
# [[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]
# 结果
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
# 其他分割方法
print(np.vsplit(A, 3))
print(np.hsplit(A, 2))

# A
# [[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]
# 结果
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

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

2.6. numpy深拷贝浅拷贝

A = np.arange(4)
print(A)

# 结果
[0 1 2 3]
# 赋值
B = A
C = A
D = A
print(B, C, D)

# 结果
[0 1 2 3] [0 1 2 3] [0 1 2 3]
A[0] = 11
print(A)
print(B, C, D)

# 原来的A [0 1 2 3]
# 结果
[11  1  2  3]
[11  1  2  3] [11  1  2  3] [11  1  2  3]
# 深拷贝
B = A.copy()

# B [11  1  2  3]
# A [11  1  2  3]
A[1] = 232323
print(A)
print(B)

# 结果
[    11 232323      2      3]
[11  1  2  3]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 操作指南 1. 概述2. 用法2.1. 怎样安装?2.2. 怎样录制?2.3. 怎样播放?2.4. 怎样写一个脚本...
    河马大师阅读 18,768评论 2 11
  • 初学记录,如有问题,请留言 docker 安装与使用 个人理解: 我们把所有的环境、依赖、所需要的数据文件等都集成...
    默写年华Antifragile阅读 1,509评论 0 0
  • 0. 前言 鉴于在卓越班暑期学习中,接触到机器学习的内容,索性深入研究一番,蹭一蹭机器学习的热度。 众所周知,学习...
    dounine阅读 142评论 0 2
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,233评论 0 13
  • 夜莺2517阅读 127,709评论 1 9