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]]]
学习地址:
?黑马程序员Python教程,4天快速入门Python数据挖掘,系统精讲+实战案例_哔哩哔哩_bilibili
|