提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、NumPy是什么?
NumPy 是用于 Python 中科学计算的一个基础包。它提供了一个多维度的数组对象,以及针对数组对象的各种快速操作,例如排序、变换,选择等操作
二、使用步骤
1.安装部署
Conda 安装:
conda install numpy
pip 安装:
pip install numpy
2.NumPy数组
在 NumPy 中,数组是由 numpy.ndarray 类来实现的,它是 NumPy 的核心数据结构。
2.1创建数组
最简单的方法就是把一个列表传入到 np.array() 或 np.asarray() 中,这个列表可以是任意维度的。np.array() 属于深拷贝,np.asarray() 则是浅拷贝。
import numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])
print(arr_1_d) #[1]
#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d) #[[1 2]
# [3 4]]
2.2数组的属性
ndim
ndim表示数组维度(轴)的个数
import numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])
#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_1_d.ndim) #1
print(arr_2_d.ndim) #2
shape
shape 表示数组的维度或形状, 是一个整数的元组,元组的长度等于 ndim。
import numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])
#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_1_d.shape) #(1,)
print(arr_2_d.shape) #(2, 2)
reshape() 函数
在不改变数组元素内容的情况下变换数组的形状。但是你需要注意的是,变换前与变换后数组的元素个数需要是一样的。
import numpy as np
#创建一个一维数组
arr_1_d = np.asarray([1])
print(arr_1_d) #[1]
#创建一个二维数组
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d) #[[1 2]
#[3 4]]
print(arr_2_d.reshape((1,4))) #[[1 2 3 4]]
print(arr_2_d.reshape((1,5))) #ValueError: cannot reshape array of size 4 into shape (1,5)
还可以使用 np.reshape(a, newshape, order) 对数组 a 进行 reshape,新的形状在 newshape 中指定。这里需要注意的是,reshape 函数有个 order 参数,它是指以什么样的顺序读写元素,其中有这样几个参数。
‘C’:默认参数,使用类似 C-like 语言(行优先)中的索引方式进行读写。
‘F’:使用类似 Fortran-like 语言(列优先)中的索引方式进行读写。
‘A’:原数组如果是按照‘C’的方式存储数组,则用‘C’的索引对数组进行 reshape,否则使用’F’的索引方式。
a = np.arange(6).reshape(2,3,order='C')
print(a) #[[0 1 2]
# [3 4 5]]
b = np.arange(6).reshape(2,3,order='F')
print(b) #[[0 2 4]
#[1 3 5]]
size
size也就是数组元素的总数,它就等于 shape 属性中元素的乘积
import numpy as np
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d.size) #4
dtype
dtype数组元素的类型,当创建时不指定类型NumPy 会自动进行判断,然后给一个默认的数据类型
import numpy as np
#创建时不指定类型
arr_2_d = np.asarray([[1, 2], [3, 4]])
print(arr_2_d.dtype) #int32
#创建时指定类型
arr_3_d = np.asarray([[1, 2], [3, 4]],dtype=float)
print(arr_3_d.dtype) #float64
数组的数据类型当然也可以改变,我们可以使用 astype() 改变数组的数据类型,不过改变数据类型会创建一个新的数组,而不是改变原数组的数据类型。
import numpy as np
arr_d = np.asarray([[1, 2], [3, 4]],dtype=float)
print(arr_d.dtype) #float64
arr_temp = arr_d.astype('int32')
print(arr_d.dtype)#float64
print(arr_temp.dtype)#int32
np.ones() 与 np.zeros()
np.ones() 用来创建一个全 1 的数组,np.zeros()用来创建一个全0 的数组,必须参数是指定数组的形状,可选参数是数组的数据类型。
import numpy as np
np.ones()
#Traceback (most recent call last):
# File "E:\PythonProject\tensorflowdaletouyuce-master\lotto-master\Test.py", line 4, in <module>
# np.ones()
#TypeError: ones() missing 1 required positional argument: 'shape'
# 报错原因是没有给定形状的参数
print(np.ones(shape=(2,3))) #[[1. 1. 1.]
#[1. 1. 1.]]
print(np.ones(shape=(2,3), dtype='int32')) #[[1 1 1]
#[1 1 1]]
np.arange()
可以使用 np.arange([start, ]stop, [step, ]dtype=None) 创建一个在[start, stop) 区间的数组
start:可选参数,默认为 0。
stop:必须参数,区间的终点,请注意,刚才说的区间是一个左闭右开区间,所以数组并不包含 stop。
step:可选参数,默认是 1。
import numpy as np
# 创建从0到4的数组
print(np.arange(5)) #[0 1 2 3 4]
# 从2开始到4的数组
print(np.arange(2,5))#[2 3 4]
# 从2开始,到8的数组,跨度是3
print(np.arange(2,9,3)) #[2 5 8]
np.linspace()
可以用 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)创建一个数组,具体就是创建一个从开始数值到结束数值的等差数列。
start:必须参数,序列的起始值。
stop:必须参数,序列的终点。
num:序列中元素的个数,默认是 50。
endpoint:默认为 True,如果为 True,则数组最后一个元素是 stop。
retstep:默认为 False,如果为 True,则返回数组与公差。
import numpy as np
# 创建从1到5的有3个元素的等差数列且不包含Stop点
print(np.linspace(1,5,3,False)) #[1. 2.33333333 3.66666667]
# 创建从1到5的有3个元素的等差数列且包含Stop点
print(np.linspace(1,5,3,True)) #[1. 3. 5.]