1.数组之间的运算:
1.数组和数的运算
数组里面的每一个元素,都会进行该操作。比如 数组 * 数字 结果为数组中的每一个元素都会进行乘以这个数字。这里其实也是利用了ndarray计算的广播效应。
2.数组和数组的运算
1.维度相同的数组:
对应元素之间进行相应的操作。数组A * 数组B 结果为数组中每一个相应的元素都会进行对应乘法的计算。
2.维度不同的数组:
采用广播效应。
2.数组运算的时候的广播效应:
当满足下方两个条件中的一个时,即可实现广播
1.对应维度的数字相同时候
2.对应维度不同时,其数字只能为1
例子如下。
data1:(2, 2, 3)
data2:(1, 3)
data3:(2, 1)
data4:(1, 2, 3)
根据以上两个实现广播的原则,data2、data3、data4都和data1相互计算。
数组之间的运算:
代码:
import numpy as np
# 数据获取
np.random.seed(22)
data = np.random.uniform(-1, 2, size=20).reshape(4, 5)
data1 = np.random.normal(0, 2, size=20).reshape(4, 5)
data3 = np.random.random(size=4).reshape(4, 1)
print('data:\n', data)
print('data1:\n', data1)
# 1.数组和数的运算
print('数组和数的运算:\n', data + 1)
# 2.相同维度的数组运算
print('相同维度的数组运算:\n', data1 + data)
# 3.不相同的数组运算
print('不相同的数组运算:\n', data + data3)
输出:
data: [[-0.37461839 0.44504319 0.26161411 1.577546 -0.48651534] [ 0.01659188 -0.1884015 1.07312405 -0.33878645 1.43585276] [-0.96841938 0.68361109 1.44117856 1.23530089 -0.43266593] [-0.9815774 1.31613161 1.8734965 1.10581365 -0.1072652 ]] data1: [[ 1.49550053 2.12935318 3.04025918 -2.97720587 3.71997978] [-3.19722605 -1.29214723 0.67465 2.09345745 1.25828668] [ 0.72611819 1.11149939 -2.17709906 0.04738954 4.99835328] [-4.98006079 -0.46972477 -0.19512692 -1.77305868 -0.27342648]] 数组和数的运算: [[0.62538161 1.44504319 1.26161411 2.577546 0.51348466] [1.01659188 0.8115985 2.07312405 0.66121355 2.43585276] [0.03158062 1.68361109 2.44117856 2.23530089 0.56733407] [0.0184226 2.31613161 2.8734965 2.10581365 0.8927348 ]] 相同维度的数组运算: [[ 1.12088214 2.57439636 3.30187328 -1.39965988 3.23346444] [-3.18063417 -1.48054873 1.74777405 1.754671 2.69413944] [-0.24230119 1.79511048 -0.7359205 1.28269043 4.56568735] [-5.96163819 0.84640684 1.67836959 -0.66724503 -0.38069167]] 不相同的数组运算: [[-0.32940828 0.4902533 0.30682422 1.62275611 -0.44130523] [ 0.7014206 0.49642722 1.75795277 0.34604227 2.12068148] [-0.11922863 1.53280184 2.29036931 2.08449163 0.41652481] [-0.85637022 1.4413388 1.99870369 1.23102084 0.01794198]]
广播效应:
代码:
import numpy as np
# 数据获取
np.random.seed(22)
data1 = np.random.random(size=12).reshape((2, 2, 3))
data2 = np.random.random(size=3).reshape((1, 3))
data3 = np.random.random(size=2).reshape((2, 1))
data4 = np.random.random(size=6).reshape((1, 2, 3))
data5 = np.random.random()
print('data1:\n', data1)
print('data2:\n', data2)
print('data3:\n', data3)
print('data4:\n', data4)
print('data5:\n', data5)
# shape为(2, 2, 3)和 (1, 3)
print('data1+data2:\n', data1 + data2)
# shape为(2, 2, 3)和 (2, 1)
print('data1+data3:\n', data1 + data3)
# shape为(2, 2, 3)和 (1, 2, 3)
print('data1+data4:\n', data1 + data4)
# shape为(2, 2, 3)和 (1, )
print('data1+data5:\n', data1 + data5)
输出:
data1: [[[0.20846054 0.48168106 0.42053804] [0.859182 0.17116155 0.33886396]] [[0.27053283 0.69104135 0.22040452] [0.81195092 0.01052687 0.5612037 ]]] data2: [[0.81372619 0.7451003 0.18911136]] data3: [[0.00614087] [0.77204387]] data4: [[[0.95783217 0.70193788 0.29757827] [0.76799274 0.68821832 0.38718348]]] data5: 0.6152058250930562 data1+data2: [[[1.02218672 1.22678136 0.60964939] [1.67290819 0.91626185 0.52797532]] [[1.08425902 1.43614165 0.40951587] [1.62567711 0.75562717 0.75031505]]] data1+data3: [[[0.2146014 0.48782193 0.4266789 ] [1.63122587 0.94320543 1.11090783]] [[0.2766737 0.69718222 0.22654538] [1.58399479 0.78257075 1.33324757]]] data1+data4: [[[1.16629271 1.18361895 0.7181163 ] [1.62717474 0.85937988 0.72604744]] [[1.228365 1.39297923 0.51798278] [1.57994366 0.6987452 0.94838718]]] data1+data5: [[[0.82366636 1.09688689 1.03574386] [1.47438782 0.78636738 0.95406979]] [[0.88573866 1.30624718 0.83561034] [1.42715675 0.6257327 1.17640952]]]
学习地址: