NumPy是使用Python进行科学计算的基础软件包。
更多学习,可参考numpy中文网:https://www.numpy.org.cn/
目录
NumPy是使用Python进行科学计算的基础软件包。
更多学习,可参考numpy中文网:https://www.numpy.org.cn/
1.数组创建
2.数组的计算
3.数组的索引与切片
1.数组创建
可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。
创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的numpy数组。其中,嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组
#将列表转换为数组
import numpy as np
array = np.array([[1,2,6],[4,5,6]])
print(array)
#1将列表转换为数组
运行结果:
[[1 2 6]
[4 5 6]]
#将元组转换为数组
import numpy as np
array = np.array(((1,2,3),(4,5,6))) #((() ,()))
print(array)
#2将元组转换为数组
运行结果:
[[1 2 6]
[4 5 6]]
#3通常,数组的元素最初是未知的,但它的大小是已知的。因此,NumPy提供了几个函数来创建具有初始占位符内容的数组。
#0数组
zeroarray = np.zeros((2,3))
print(zeroarray)
#1数组
onearray = np.ones((3,4),dtype='int32')
print(onearray)
#空数组(随机生成)
emptyarray = np.empty((3,4))
print(emptyarray)
运行结果:
[[0 0 0]
[0 0 0]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[6.92695269e-310 4.64024822e-310 0.00000000e+000 0.00000000e+000]
[0.00000000e+000 0.00000000e+000 0.00000000e+000 2.42092166e-322]
[4.64024821e-310 4.64024823e-310 0.00000000e+000 0.00000000e+000]]
#4为了创建数字组成的数组,NumPy提供了一个类似于range的函数,该函数返回数组而不是列表。
array = np.arange( 10, 31,3 ) #从十到三十一间隔为三
print(array)
运行结果:
[10 13 16 19 22 25 28]
#5输出数组的一些信息,如维度、形状、元素个数、元素类型等
array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(array)
#数组维度
print(array.ndim)
#数组形状
print(array.shape)
#数组元素个数
print(array.size)
#数组元素类型
print(array.dtype)
运行结果:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
2
(4, 3)
12
int64
#6重新定义数字的形状
array1 = np.arange(6).reshape([2,3])
print(array1)
array2 = np.array([[1,2,3],[4,5,6]],dtype=np.int64).reshape([3,2])
print(array2)
运行结果:
[[0 1 2]
[3 4 5]]
[[1 2]
[3 4]
[5 6]]
2.数组的计算
数组很重要,因为它可以使我们不用编写循环即可对数据执行批量运算。这通常叫做矢量化(vectorization)。
大小相等的数组之间的任何算术运算都会将运算应用到元素级。同样,数组与标量的算术运算也会将那个标量值传播到各个元素.
#1矩阵的基础运算:
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.ones([2,3],dtype=np.int64)
print(arr1 + arr2)
print(arr1 - arr2)
print(arr1 * arr2)
print(arr1 / arr2)
print(arr1 ** 2)
#矩阵乘法
arr3 = np.array([[1,2,3],[4,5,6]])
arr4 = np.ones([3,2],dtype=np.int64)
print(arr3)
print(arr4)
print(np.dot(arr3,arr4))
运行结果:
[[2 3 4]
[5 6 7]]
[[0 1 2]
[3 4 5]]
[[1 2 3]
[4 5 6]]
[[1. 2. 3.]
[4. 5. 6.]]
[[ 1 4 9]
[16 25 36]]
#乘法
[[1 2 3]
[4 5 6]]
[[1 1]
[1 1]
[1 1]]
[[ 6 6]
[15 15]]
#2矩阵的其他计算:行求和,列求和。最大。最小。平均。最大取数位置。最小取数位置。
print(arr3)
print(np.sum(arr3,axis=1)) #axis=1,每一行求和 axie=0,每一列求和
print(np.max(arr3))
print(np.min(arr3))
print(np.mean(arr3))
print(np.argmax(arr3))
print(np.argmin(arr3))
运行结果:
[[1 2 3]
[4 5 6]]
[ 6 15]
6
1
3.5
5
0
#3转置后行展开
arr3_tran = arr3.transpose()
print(arr3_tran)
print(arr3.flatten())
运行结果:
[[1 4]
[2 5]
[3 6]]
[1 2 3 4 5 6]
3.数组的索引与切片
arr5 = np.arange(0,6).reshape([2,3])
print(arr5)
#第一行
print(arr5[1])
#一行二列,一行一列
print(arr5[1][2])
print(arr5[1,1])
#第一行/列
print(arr5[1,:])
print(arr5[:,1])
#第一行0,1列
print(arr5[1,0:2])
运行结果:
[[0 1 2]
[3 4 5]]
[3 4 5]
5
4
[3 4 5]
[1 4]
[3 4]
|