今天我们来一起学习关于数组的一些基本数学计算中,对于数值型元素的数组,可以参与各种数学计算,这是Numpy数组功能的强大。今天学习的是数组的的加、减、乘、除法,Let‘s go!顺便巩固上篇博客关于数组的建立和数组方法
import numpy as np
one = np.ones(4).reshape(2,2)
print('数组与标量相加one + 1:', one + 1) #相当于数组的每一个元素都加上这个标量
two = np.arange(4).reshape(2,2)
print('数组与数组相加one + two:', one + two) #数组与数组相加就是对应位置相加,前提是两个矩阵满足广播原则(Broadcasting Rules)
#这里简单科普一下广播原则,在后续的学习中会生动展示,它有两点:
#原则一:两个数组其中一个(行或者列)的长度为1,则可以广播
#原则二:两个数组的后缘维度(Trailing Dimension,即从末尾开始算起的维度)的长度相符,则可以广播
print('数组与数组相加(采用np.add(one , two)方式):', np.add(one , two))
one += 4
print('数组与标量相加(采用赋值运算方法)one += 4:', one) #把4累加赋值给one数组中的每一个元素
输出:
数组与标量相加one + 1: [[2. 2.]
[2. 2.]]
数组与数组相加one + two: [[1. 2.]
[3. 4.]]
数组与数组相加(采用np.add(one , two)方式): [[1. 2.]
[3. 4.]]
数组与标量相加(采用赋值运算方法)one += 4: [[5. 5.]
另外,书上说通过赋值运算符号,会生成新的数组,我做了下面一个小实验,查看了这两次o1输出的地址,惊人地发现是一样的,说明是o1还是那个o1,我也不知道这是什么肥事,如果有读者看到了这里也可以去试一试,大家一起把原因捋一捋
o1 = np.ones(4).reshape(2,2)
print(o1, id(o1))
o1 += 4
print(o1, id(o1))
输出:
[[1. 1.]
[1. 1.]] 2285942670000
[[5. 5.]
[5. 5.]] 2285942670000
one1 = np.arange(1,10).reshape(3,3)
print('one1=',one1)
five = np.full((3,3), 5) #3*3,值都为5的数组
print('数组与数组相减one1 - five:', one1 - five) #数组对应元素相减
print('数组与数组相加(采用np.subtract(one1 , five)方式):', np.subtract(one1 , five))
print('数组与标量相减one1 - 5:', one1 - 5) #相当于数组的每一个元素都减去这个标量
one1 -= 1
print('数组与标量相减(采用赋值运算方法)one1 -= 1:', one1)
输出:
one1= [[1 2 3]
[4 5 6]
[7 8 9]]
数组与数组相减one1 - five:
[[-4 -3 -2]
[-1 0 1]
[ 2 3 4]]
数组与数组相加(采用np.subtract(one1 , five)方式):
[[-4 -3 -2]
[-1 0 1]
[ 2 3 4]]
数组与标量相减one1 - 5:
[[-4 -3 -2]
[-1 0 1]
[ 2 3 4]]
数组与标量相减(采用赋值运算方法)one1 -= 1:
[[0 1 2]
[3 4 5]
[6 7 8]]
one2 = np.arange(1,5).reshape(2, 2)
print('one2=', one2)
Multi = np.full((2, 2), 2) #2*2,值都为2的数组
print('Multi=', Multi)
print('数组与数组相乘one2 * Multi:', one2 * Multi) #数组相乘
print('数组与数组相乘(采用np.multiply(one2 , Multi)方式):', np.multiply(one2 , Multi))
print('数组与标量相乘one2 * 2:',one2 * 2) #相当于数组的每一个元素都去乘这个标量
one2 *= 3
print('数组与标量相乘(采用赋值运算方法)one2 *= 3:', one2)
注意,这里的数组乘法是对应元素相乘,与线性代数中矩阵乘法有区别
ne2= [[1 2]
[3 4]]
Multi= [[2 2]
[2 2]]
数组与数组相乘one2 * Multi:
[[2 4]
[6 8]]
数组与数组相乘(采用np.multiply(one2 , Multi)方式):
[[2 4]
[6 8]]
数组与标量相乘one2 * 2:
[[2 4]
[6 8]]
数组与标量相乘(采用赋值运算方法)one2 *= 3:
[[ 3 6]
[ 9 12]]
one3 = np.full((2, 2), 8)
print('one3=', one3)
divi = np.array([[2,2],[2,2]])
print('divi=', divi)
print('数组与数组相除one3 / divi:', one3 / divi) #数组相除,对应元素相除
print('数组与数组相除(采用np.divide(one3 , divi)方式):', np.divide(one3 , divi))
print('数组与标量相除one3 / 2:',one3 / 2) #相当于数组的每一个元素都去除这个标量
#注意,数组除法中不存在one3/=2,会报错
one3= [[8 8]
[8 8]]
divi= [[2 2]
[2 2]]
数组与数组相除one3 / divi:
[[4. 4.]
[4. 4.]]
数组与数组相除(采用np.divide(one3 , divi)方式):
[[4. 4.]
[4. 4.]]
数组与标量相除one3 / 2:
[[4. 4.]
[4. 4.]]
转载请注明出处
##《Python编程从数据分析到机器学习实践》##