程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上
它是一个Python库,提供了多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种例程,包括数学,逻辑,形状操作,排序,选择,I/O,离散傅里叶变换,基本线性代数,基本统计操作,随机模拟等等。
NumPy包的核心是narray对象。这封装了同构数据类型的n维数组,许多操作在编译后的代码中执行,以提高性能。NumPy数组和标准Python序列之间有几个重要的区别:
NumPy数组在创建时具有固定的大小,不像Python列表(可以动态增长)。更改narray的大小将创建一个新数组并删除原来的数组。
NumPy数组中的元素都需要具有相同的数据类型,因此在内存中具有相同的大小。例外:可以有(Python,包括NumPy)对象的数组,从而允许不同大小元素的数组。
NumPy数组有助于对大量数据进行高级数学和其他类型的操作。通常,与使用Python的内置序列相比,这样的操作执行效率更高,代码也更少。
pip install numpy
import numpy as np
arr = np.array([1,2,3,4,5,6])
print(arr,type(arr))
# 元素类型
print(arr.dtype)
# 数组的维度,对于n行m列的数组,shape为(n,m)
print(arr.shape)
# 元素个数
print(arr.size)
# 维度
print(arr.ndim)
# 每个元素大小(字节)
print(arr.itemsize)
#输出
[1 2 3 4 5 6] <class 'numpy.ndarray'>
int32
(6,)
6
1
4
二维数组
arr2 = np.array([[1,2],[1.1,2.2],[1.11,2.22]])
# 元素类型
print(arr2.dtype)
# 数组的维度,对于n行m列的数组,shape为(n,m)
print(arr2.shape)
# 元素个数
print(arr2.size)
# 维度
print(arr2.ndim)
# 每个元素大小(字节)
print(arr2.itemsize)
#输出
loat64
(3, 2)
6
2
8
用array()函数来创建,括号内可以是列表、元祖、数组、生成器等
arr = np.array(5)
print(arr,type(arr))
arr = np.array([1,2,3])
print(arr,type(arr))
arr = np.array([[1,2,3],[1,2,3]])
print(arr,type(arr))
arr = np.array(range(5))
print(arr,type(arr))
#输出
5 <class 'numpy.ndarray'>
[1 2 3] <class 'numpy.ndarray'>
[[1 2 3]
[1 2 3]] <class 'numpy.ndarray'>
[0 1 2 3 4] <class 'numpy.ndarray'>
arange()类似于range(),在给定区间内返回均匀间隔的数值
#返回整型
print(np.arange(6))
#返回浮点型
print(np.arange(6.0))
#返回6到10
print(np.arange(6,10))
#返回6到20,步长为3
print(np.arange(6,20,3))
#返回大数组,无法打印的跳过中心部分
print(np.arange(60000))
#输出
[0 1 2 3 4 5]
[0. 1. 2. 3. 4. 5.]
[6 7 8 9]
[ 6 9 12 15 18]
[ 0 1 2 ... 59997 59998 59999]
返回样本,指定区间内[开始,停止],计算的num个均匀间隔的样本
print(np.linspace(6,10,15))
#末尾的数值包不包含,其默认值为True
print(np.linspace(6,10,15,endpoint=False))
#创建数组且用0填充
print(np.zeros(5))
print(np.ones(5))
print(np.zeros_like(np.zeros(5)))
#输出
[ 6. 6.28571429 6.57142857 6.85714286 7.14285714 7.42857143
7.71428571 8. 8.28571429 8.57142857 8.85714286 9.14285714
9.42857143 9.71428571 10. ]
[6. 6.26666667 6.53333333 6.8 7.06666667 7.33333333
7.6 7.86666667 8.13333333 8.4 8.66666667 8.93333333
9.2 9.46666667 9.73333333]
[0. 0. 0. 0. 0.]
[1. 1. 1. 1. 1.]
[0. 0. 0. 0. 0.]
arr = np.array([1,2,3,4,5])
arr1 = arr.copy()
print(arr1,type(arr1))
#输出
[1 2 3 4 5] <class 'numpy.ndarray'>
arr1=np.arange(10,dtype=float)
arr2=arr1.astype(np.int64)
print(arr1,arr1.dtype)
print(arr2,arr2.dtype)
#输出
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] float64
[0 1 2 3 4 5 6 7 8 9] int64
横向堆叠
a=np.arange(4)
b=np.arange(4,7)
print(a)
print(b)
# 横向连接
print(np.hstack((a,b)))
#输出
[[1]
[2]
[3]]
[['4']
['5']
['6']
['7']]
竖向堆叠,必须保证列相同
a=np.array([[1],[2],[3]])
b=np.array([['4'],['5'],['6'],[7]])
print(a)
print(b)
# 竖向堆叠,必须保证列相同
print(np.vstack((a,b)))
#输出
[['1']
['2']
['3']
['4']
['5']
['6']
['7']]
用来改变数组的形状
arr =- np.zeros((3,4),dtype=int)
print(arr)
print(arr.reshape(4,3))
#输出
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]
运算不需要循环遍历,真心强大
arr = np.arange(6).reshape(2,3)
print(arr)
# 加法
print(arr+10)
# 乘法
print(arr*2)
# 除法
print(1/(arr+1))
# 幂
print(arr**2)
#输出
[[0 1 2]
[3 4 5]]
[[10 11 12]
[13 14 15]]
[[ 0 2 4]
[ 6 8 10]]
[[1. 0.5 0.33333333]
[0.25 0.2 0.16666667]]
[[ 0 1 4]
[ 9 16 25]]
# 平均值
print(arr.mean())
# 最大值
print(arr.max())
# 最小值
print(arr.min())
# 标准差
print(arr.std())
# 方差
print(arr.var())
# 求axis为0,按列求和
print(arr.sum(),np.sum(arr,axis=0))
# axis为1,按行求和
print(arr.sum(),np.sum(arr,axis=1))
# 排序
print(np.sort(np.array([5,34,6,7,2,3])))
#输出
2.5
5
0
1.707825127659933
2.9166666666666665
15 [3 5 7]
15 [ 3 12]
[ 2 3 5 6 7 34]