机器学习基础 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

Numpy数组的基本运算

算术运算符仍然可用于Numpy数组的运算,在运算完成后将会创建一个新的数组。

import numpy as np
a = np.array( [20,30,40,50] )
b = np.arange(4)    #b=array([0, 1, 2, 3])
print(a-b)        #对应元素减法运算,结果:array([20, 29, 38, 47])
print(b\*\*2)        #幂运算,结果:array([0, 1, 4, 9])
print(10\*np.sin(a))
'''
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
'''

A = np.array([[1,1],[0,1]])
B = np.array([[2,0],[3,4]])
print(A\*B)        #A和B对应位置的元素相乘,结果:array([[2, 0],[0, 4]])
print(A.dot(B))
'''
A和B进行矩阵乘法,结果:array([[5, 4],[3, 4]])。在python3.5+版本,可使用A@B完成矩阵乘法
'''
print(np.dot(A,B))    #等同于A.dot(B)

a=np.ones((2,3), dtype=int) #创建2行3列数值全为1的矩阵,数值类型为整型
b=np.random.random((2,3))    #创建2行3列数值为0~1之间随机浮点数的矩阵
a\*=3    #a对应元素变为原来3倍,结果:array([[3, 3, 3],[3, 3, 3]])
b+=a #将a与b相加结果赋给b,结果:array([[3.417022,3.72032449,3.00011437],[3.30233257,3.14675589,3.09233859]])
a+=b
'''
出错!!!由于a元素为整型,b元素为浮点型,整型与浮点型相加后结果为浮点型,而a创建时指定数组元素为整型,导致类型无法隐式转换,无法将计算出的浮点型矩阵赋值给a
'''

a=np.ones(3, dtype=np.int32)
b=np.linspace(0,pi,3) #创建包含3个元素的等差数列数组,首值为0,末值为pi。b为array([0,1.57079633,3.14159265])
print(b.dtype.name) #输出b的数据类型,即为'float64'
c=a+b    #c的值为array([1.,2.57079633,4.14159265])
print(c.dtype.name)    #'float64'
d=np.exp(c\*1j)
'''
注意1j是虚数,进行复数运算,结果:array([0.54030231+0.84147098j, -0.84147098+0.54030231j,-0.54030231-0.84147098j])
'''
print(d.dtype.name)    #'complex128'数组元素为128位的复数

很多一元运算符是以函数的形式存在的,比如说对数组的所有元素求和运算。另外很多函数在无参数的情况下是对所有元素作用。当通过参数指定某一行或列时,则只在指定的范围内求出元素。

a = np.ones((2,3))
print(a.sum())    #对a中所有元素求和 
print(a.min())    #求a中元素的最小值
print(a.max())    #求a中元素的最大值
print(a.reshape(1,6))    #将数组变形为1行6列的数组,即array([1,1,1,1,1,1])
a.sum(axis=0)            #对每一列求和,即array([2,2,2])
a.min(axis=1)            #求每一行最小值,即array([1,1])
a.cumsum(axis=1)        #求每一行的累加,即array([[1,2,3],[1,2,3]])
示例代码:Numpy-array-operate.py