首页 > 其他 > 详细

NumPy模块

时间:2020-02-18 00:34:01      阅读:113      评论:0      收藏:0      [点我收藏+]

NumPy模块的作用

这个模块是用C语言写的模块,主要是用于科学计算。而使用这个模块是基于多维数组的。

数组与列表的区别

一、数组里的元素必须是同一类型的数据
二、数组的大小是固定的。

numpy的安装

pip install numpy

数组对象的创建

数组对象的创建一般有以下的方法(注意首先导入numpy)

import numpy as np

# 创建对象的方法,均可带参数dtype指定数组元素的类型
# 方法一、
# arr = np.array([1, 2, 3, 4])

# 方法二、类似于range,不过此处步长可为小数
# arr = np.arange(3, 10, 0.2)

# 方法三、前两个参数与arange一样,但第三个参数表明元素的个数
# arr = np.linspace(3, 10, 10)

# 方法四、由于创建的数组不能为空,以下创建的数组的元素均是0
# arr = np.zeros(3)  # [0. 0. 0.]
# arr = np.zeros((3, 5))  # 创建的是3个数组,而每个数组含有5个元素
"""
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
"""

# 方法五、与四类似,但元素均是1
# arr = np.ones(4)
# arr = np.ones((3, 5))

# 方法六、随机从内容里筛选出废弃的内存地址
arr = np.empty((3, 5))

ndarray数据类型:dtype

布尔型:bool_
整数型:int_ int8 int16 int32 int64
无符号整数型:uint8 unit16 uint32 uint64
浮点型:float_ float16 float32 float64
复数型:complex_ complex64 complex128

多维数组的操作

运算

数组与一般的数值型数据也可以进行加减乘除等运算,运算结果是每一个元素都与数值型数据进行运算,例子如下:

# 与数值型数据的运算
arr = np.arange(0, 15)
print(arr * 2)  # [ 0  2  4  6  8 10 12 14 16 18 20 22 24 26 28]

数组也可以与数组之间进行运算,但注意必须要求两个数组的shape是一样,运算过程是对同一个索引的元素进行运算,例子如下:

# 与数组的运算
arr = np.arange(0, 15)
arr1 = np.arange(3, 18)
print(arr*arr1)  # [  0   4  10  18  28  40  54  70  88 108 130 154 180 208 238]

索引

一维的索引和列表是一样的,但二维的也可以和列表一样,也可以使用[行号,列号]获取,如下:

# 索引
array2d = np.arange(0, 15).reshape((3, 5))
"""
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
"""
# 获取7的方式一,但不推荐
print(array2d[1][2])  # 7,第二列的第3个,和列表是一样的
# 获取7的方式二,推荐
print(array2d[1, 2])

切片

一维的和列表切片是一样的,这里主要是说明多维的切片
用法:ndarray对象[行切片,列切片]

array2d = np.arange(0, 15).reshape((3, 5))
"""
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
"""
# 获取第二行到第三行的第四个数:数组对象[行数切片,列切片]
print(array2d[1:, 3])
# 获取第1行到第二行的前3个数
print(array2d[0:3, :3])

切片的赋值

对切片进行赋值,会把切片的内容改为设置的值,如下:

# 切片赋值
arr1 = np.arange(0, 15)
# 把前4个数都改为0
arr1[:5] = 0
print(arr1)  # [ 0  0  0  0  0  5  6  7  8  9 10 11 12 13 14]

但注意以下情况:
arr2 = arr1[0:5]
这样arr1和arr2是同一内存地址,任何一个数组改变,另外一个也会改变

arr1 = np.arange(0, 15)
# 引用了arr1,这样其实它们是不会复制,而是指向同一内存地址,所以arr2改变了,arr1也会改变
arr2 = arr1[3:8]
arr2[0] = 100
print(arr1)  # [  0   1   2 100   4   5   6   7   8   9  10  11  12  13  14]

而要实现这两个数组是不同的内存地址,可使用copy()方法,则彼此不会影响

arr1 = np.arange(0, 15)
arr2 = arr1[3:8].copy()
arr2[0] = 100
print(arr1)  # [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

属性

ndarray对象具有以下属性:
dtype:元素类型
size:元素个数
ndim:维度
shape:返回一个元组(行数,列数)
T:行与列的转换

array2d = np.arange(0, 15).reshape((3, 5))
print(array2d.dtype)  # int32
print(array2d.size)  # 15个元素
print(array2d.ndim)  # 维度
print(array2d.shape)  # (3,5)表示3行5列
print(array2d.T)  # 行与列进行置换

NumPy模块

原文:https://www.cnblogs.com/Treelight/p/12324254.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!