python之numpy库入门知识

目录

一、numpy库简介

二、N维数组对象ndarray介绍

1. 小例子

2. ndarray对象的属性

3. ndarray数组的创建方法

(1)通过列表、元组创建

(2)通过numpy中的函数创建

4. ndarray数组的维度变换

(1).reshape()方法

(2) .resize()方法

(3) .swapaxes()方法

(4) .flatten()方法

5. ndarray数组的类型变换

(1) .tolist()函数

6. 数组的索引和切片

(1)一维数组的索引和切片

(2)多维数组的索引

(3)多维数组的切片

7. 数组与标量的运算


一、numpy库简介

numpy是一个开源的python科学计算基础库,提供了以下功能:

1. 一个强大的N维数组对象:ndarray。

2. 广播功能函数。

3. 整合C/C++/Fortran代码的工具。

4. 线性代数、傅里叶变换、随机数生成等功能。

二、N维数组对象ndarray介绍

1. 小例子

eg: 计算一个列表中每个元素的平方:

# 不使用numpy数组的做法
a = [0, 1, 2, 3, 4]
b = []
for i in range(len(a)):
    b.append(a[i] ** 2)
print('不使用numpy数组的做法:', b)

# 使用numpy数组的做法
import numpy as np

a = [0, 1, 2, 3, 4]
a = np.array(a)
b = a ** 2
print('使用numpy数组的做法:', b)

输出结果如下:

不使用numpy数组的做法: [0, 1, 4, 9, 16]
使用numpy数组的做法: [ 0  1  4  9 16]

2. ndarray对象的属性

属性含义
.ndim秩(即轴的数量)
.shape尺度(如是矩阵,则为n行m列)
.size对象元素个数
.dtype元素类型
.itemsize每个元素的大小(以字节为单位)

示例:

# ndarray对象的属性
import numpy as np

print('生成一个二维数组:')
a = np.array([[0, 1, 2], [3, 4, 5]])
print(a)
print('秩:', a.ndim)
print('尺度:', a.shape)
print('对象元素个数:', a.size)
print('元素类型:', a.dtype)
print('每个元素的大小:', a.itemsize)

输出结果如下:

[[0 1 2]
 [3 4 5]]
秩: 2
尺度: (2, 3)
对象元素个数: 6
元素类型: int32
每个元素的大小: 4

3. ndarray数组的创建方法

(1)通过列表、元组创建

a = np.array([0, 1, 2])
print('通过列表创建:', a)
b = np.array((3, 4, 5))
print('通过原则创建:', b)

输出结果如下:

通过列表创建: [0 1 2]
通过原则创建: [3 4 5]

(2)通过numpy中的函数创建

函数作用
np.arange(n)生成从0到n-1的数组
np.ones(shape)根据shape生成一个元素全为1的数组
np.zeros(shape)根据shape生成一个元素全为0的数组
np.full(shape, values)

根据shape生成一个元素全为values的数组

np.ones_like(a)根据数组a的形状生成一个元素全为0的数组
np.zeros_like(a)根据数组a的形状生成一个元素全为1的数组

np.full_like(a, values)

根据数组a的形状生成一个元素全为values的数组

np.eye(n)生成n阶单位矩阵
np.linspace(a, b, number)从a到b等间距地生成number个数据,形成数组
np.concatenate((a, b), axis=0)

按0轴方向合并a,b数组

a = np.arange(6)
print('a\n',a)

b = np.ones((2, 3))
print('b\n',b)

c = np.zeros((2, 3))
print('c\n',c)

d = np.full((2, 3), 9)
print('d\n',d)

e = np.ones_like(b)
print('e\n',e)

f = np.zeros_like(b)
print('f\n',f)

g = np.full_like(b, 9)
print('g\n',g)

h = np.eye(6)
print('h\n',h)

i = np.linspace(1, 10, 6)
print('i\n',i)

j = np.concatenate((d, e, f), axis=1)
print('j\n',j)

k = np.concatenate((d, e, f))  # 默认axis=0
print('k\n', k)

输出结果如下:

a
 [0 1 2 3 4 5]
b
 [[1. 1. 1.]
 [1. 1. 1.]]
c
 [[0. 0. 0.]
 [0. 0. 0.]]
d
 [[9 9 9]
 [9 9 9]]
e
 [[1. 1. 1.]
 [1. 1. 1.]]
f
 [[0. 0. 0.]
 [0. 0. 0.]]
g
 [[9. 9. 9.]
 [9. 9. 9.]]
h
 [[1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 1.]]
i
 [ 1.   2.8  4.6  6.4  8.2 10. ]
j
 [[9. 9. 9. 1. 1. 1. 0. 0. 0.]
 [9. 9. 9. 1. 1. 1. 0. 0. 0.]]
k
 [[9. 9. 9.]
 [9. 9. 9.]
 [1. 1. 1.]
 [1. 1. 1.]
 [0. 0. 0.]
 [0. 0. 0.]]

4. ndarray数组的维度变换

函数作用
.reshape(shape)根据shape生成一个数组,不改变原数组
.resize(shape)根据shape生成一个数组,直接改变原数组
.swapaxes(ax1, ax2)将n个维度中的两个维度进行调换
.flatten()对数组进行降至一维,不改变原数组

(1).reshape()方法

a = np.arange(6)
print('a\n', a)
b = a.reshape((2, 3))  # 2行3列的数组
print('b\n', b)

输出结果如下:

a
 [0 1 2 3 4 5]
b
 [[0 1 2]
 [3 4 5]]

(2) .resize()方法

a = np.arange(6)
print('a\n', a)
c = a.resize((2, 3))
print('c\n', c)  # 不会生成新数组,输出c为空
print('a\n', a)  # 直接改变原数组,输出a发现发生了改变

输出结果如下:

a
 [0 1 2 3 4 5]
c
 None
a
 [[0 1 2]
 [3 4 5]]

(3) .swapaxes()方法

a = np.arange(6).reshape(2, 3)
print('a\n', a)
d = a.swapaxes(0, 1)  # 改变0维和1维度的顺序
print('d\n', d)

输出结果如下:

a
 [[0 1 2]
 [3 4 5]]
d
 [[0 3]
 [1 4]
 [2 5]]

(4) .flatten()方法

a = np.arange(6).reshape(2, 3)
print('a\n', a)
e = a.flatten()
print('e\n', e)

输出结果如下:

a
 [[0 1 2]
 [3 4 5]]
e
 [0 1 2 3 4 5]

5. ndarray数组的类型变换

(1) .tolist()函数

a = np.arange(6).reshape(2, 3)
print('a\n', a)
b = a.tolist()
print('b\n', b)

输出结果如下:

a
 [[0 1 2]
 [3 4 5]]
b
 [[0, 1, 2], [3, 4, 5]]

6. 数组的索引和切片

(1)一维数组的索引和切片

a = np.arange(10)
print('a\n', a)
b = a[2]  # 数组下标是从0开始的,这里相当于取第3个值
print('b\n', b)
c = a[1:7:2]  # 在[1,7)区间中从1开始以2为步长取值
print('c\n', c)

输出结果如下:

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

(2)多维数组的索引

a = np.arange(24).reshape((2, 3, 4))
print('a\n', a)
b = a[0, 1, 2]
print('b\n', b)
c = a[1, 2, -3]
print('c\n', c)

输出结果如下:

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

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
b
 6
c
 21

(3)多维数组的切片

a = np.arange(24).reshape((2, 3, 4))
print('a\n', a)
b = a[0:1, 0:2, 0:3]
print('b\n', b)
c = a[-2:-1, 1:, :]
print('c\n', c)

输出结果如下:

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

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

7. 数组与标量的运算

# 数组与标量之间的运算作用于数组的每一个元素
a = np.arange(5)
print('a\n', a)
b = a * 2
print('b\n', b)
c = a / a.mean()
print('c\n', c)

输出结果如下:

a
 [0 1 2 3 4]
b
 [0 2 4 6 8]
c
 [0.  0.5 1.  1.5 2. ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值