Numpy


文章目录

  • Numpy
  • 一、如何使用Numpy
  • 1. 导入Numpy
  • 2. 创建数组函数
  • 3. 关于数组的一些操作
  • 数组的相关信息
  • 数据类型
  • 生成全部为0的数组
  • 生成全部为1的数组(类似于0)
  • 生成一个有序的数组
  • 规定数组的形状
  • 将数组分段
  • 4.numpy的基础运算
  • 一维数组的加减乘除
  • 判断
  • 二维数组相乘
  • 一些函数
  • 5. numpy的索引
  • 一维数组索引
  • 二维矩阵索引
  • 行数的索引
  • 行、列的索引
  • 每一行分别输出
  • 每一列分别输出
  • 每一项分别输出
  • 6. 数组合并
  • 上下合并
  • 左右合并
  • 横、纵向合并
  • 7. 数组分割
  • 横向分割
  • 纵向组合
  • 纵向组合


一、如何使用Numpy

1. 导入Numpy

import numpy as np

2. 创建数组函数

通过Numpy中库中的array函数可以创建ndarray数组。

Numpy库可将数据转换为ndarray数组。

np.array()

import numpy as np
a = np.array([1,2,3])

这样就创造了一个一维数组

import numpy as np
a = np.array([[1,2,3],[3,4,5]])

这样就创造了一个二维数组

3. 关于数组的一些操作

数组的相关信息
import numpy as np
a = np.array([[1,2,3],[3,4,5]])
print(a)
print(a.ndim)     #输出数组的维度
print(a.shape)    #输出数组的形状(行数、列数)
print(a.size)     #输出数组总共的元素数量

输出结果如下:

[[1 2 3]
 [3 4 5]]
2
(2,3)   #两行三列
6
数据类型

python怎样把numpy数组变成字符串输出 numpy转换成数组_numpy

使用方法为:

a = np.array([1,2,3],dtype=)   #dtype后填数据类型
生成全部为0的数组
a = np.zeros()

括号里可以填自己想生成几行几列的0,但必须用括号括起来,如下:

a = np.zeros((3,4))

这样就会得到一个三行四列的全为0的数组。

生成全部为1的数组(类似于0)
a = np.ones()
生成一个有序的数组
a = np.arange(n)

这样就会生成一个从0到n-1的一维数组。

还可以定义其步长:

a = np.arange(10,20,2)
规定数组的形状

用reshape函数

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

输出结果如下:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
将数组分段
a = np.linspace(1, 10, 5)
#从1开始,到10结束,平均分成4段

这个也可以规定形状。

4.numpy的基础运算

一维数组的加减乘除
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
c = a - b
print(a)
print(b)
print(c)

得到的结果如下:

[10 20 30 40]
[0 1 2 3]
[10 19 28 37]

容易看出,numpy中两个数组相减,是挨个对应相减,加、乘、除也是。

判断
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(b<3)

运行结果如下:

[ True  True  True False]

得到的是布尔类型的数据。

二维数组相乘
import numpy as np
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))

c = a * b
c1 = np.dot(a,b)   #也可写成 a.dot(b)

print(c)
print(c1)

运行结果如下:

#挨个对应相乘
[[0 1]
 [0 3]]
#矩阵的乘法
[[2 4]
 [2 3]]
一些函数

函数名称

函数作用

np.sum(a,axis=)或a.sum()

求数组a里的数字之和,axis=1则是分别求每一行的总和,axis=0则是分别求每一列的总和

np.min(a)或a.min()

求数组a里的最小值,也可以加入axis参数

np.max(a)或a.max()

求数组a里的最大值,自然也可以用axis参数

np.argmin(a)或a.argmin()

找a中最小值的索引值

np.argmax(a)或a.argmax()

找a中最大值的索引值

np.mean(a)或a.mean()

计算a中元素的平均值

np.average(a)

计算a中元素的平均值

np.median(a)

找a中的中位数

np.cumsum(a)

前缀和

np.diff(a)

后一个数减前一个数,b1 = a2 - a1,b2= a3 - a2…

np.sort(a)

给a排序

np.transpose(a)或a.T

矩阵的转置

np.clip(a,a_min,a_max)

保留a_min与a_max中间的数,小于a_min的变成a_min,大于a_max的变成a_max

5. numpy的索引

一维数组索引
import numpy as np

a = np.arange(3,15)

print(a[3])

输出结果为:

6
二维矩阵索引
行数的索引
import numpy as np

a = np.arange(3,15).reshape((3,4))

print(a[2])

输出结果为:

[11 12 13 14]

此时索引的是行数。

行、列的索引
import numpy as np

a = np.arange(3,15).reshape((3,4))

print(a[1][1])   #也可以这样写 a[1,1],前面为行,后面为列

输出结果为:

8

此时对行和列索引。

每一行分别输出
import numpy as np

a = np.arange(3,15).reshape((3,4))

for row in a:
    print(row)

输出结果为:

[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
每一列分别输出
import numpy as np

a = np.arange(3,15).reshape((3,4))

for column in a.T:     #由于不可以直接将每一列输出,所以要先将矩阵转置
    print(column)

输出结果为:

[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
每一项分别输出
import numpy as np

a = np.arange(3,15).reshape((3,4))

for item in a.flat:   #先将二维数组转换为一维数组,再逐个输出
    print(item)

输出结果为:

3
4
5
6
7
8
9
10
11
12
13
14

6. 数组合并

上下合并
import numpy as np

a = np.array([1,1,1])
b = np.array([2,2,2])

print(np.vstack((a,b)))   #vertical stack

输出结果为:

[[1 1 1]
 [2 2 2]]
左右合并
import numpy as np

a = np.array([1,1,1])
b = np.array([2,2,2])

print(np.hstack((a,b)))   #horizontal stack

输出结果为:

[1 1 1 2 2 2]
横、纵向合并

还可以用np.concatenate((a,b,…),axis=):

axis=0的时候为纵向相加,axis=1的时候为横向相加。

特别注意:如果是一维数组,当axis=1的时候会报错。

一维:

import numpy as np

a = np.array([1,1,1])
b = np.array([2,2,2])

print(np.concatenate((a,b),axis=0))

输出结果为:

[1 1 1 2 2 2]

二维纵向:

import numpy as np

a = np.array([1,1,1]).reshape((3,1))
b = np.array([2,2,2]).reshape((3,1))

print(np.concatenate((a,b),axis=0))

输出结果为:

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

二维横向:

import numpy as np

a = np.array([1,1,1]).reshape((3,1))
b = np.array([2,2,2]).reshape((3,1))

print(np.concatenate((a,b),axis=1))

输出结果为:

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

7. 数组分割

横向分割
import numpy as np

a = np.arange(16).reshape((4,4))

print(np.hsplit(a,2))     #数字的意思是分成几份(平均分)

输出结果为:

[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), 
 array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
纵向组合
import numpy as np

a = np.arange(16).reshape((4,4))

print(np.vsplit(a,2))

输出结果为:

[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), 
 array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
import numpy as np

a = np.arange(16).reshape((4,4))

print(np.hsplit(a,2))     #数字的意思是分成几份(平均分)

输出结果为:

[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), 
 array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
纵向组合
import numpy as np

a = np.arange(16).reshape((4,4))

print(np.vsplit(a,2))

输出结果为:

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

类似的,可以用split实现指定方向的分割,需设定axis的值。