温州做网站老师,学校网站logo怎么做,一个空间可以放两个网站吗,大型网站开发心得6. 连接数组
6.1. 连接数组#xff0c; 6.2. 分割数组#xff0c; 6.3. 算术运算#xff0c; 6.4. 广播#xff08;重点#xff09;
6.1 连接数组
concatenatehstackvstack
6.1.1 使用concatenate函数
沿指定轴连接多个数组#xff0c;语法格式如下#xff1a; num…6. 连接数组
6.1. 连接数组 6.2. 分割数组 6.3. 算术运算 6.4. 广播重点
6.1 连接数组
concatenatehstackvstack
6.1.1 使用concatenate函数
沿指定轴连接多个数组语法格式如下 numpy.concatenate((a1, a2, …), axis0)
a1, a2是要连接的数组除了连接指定轴外其他轴大小元素个数相同。即按行连接每一行的元素个数要相同axis是沿指定轴的索引默认为0。
import numpy as np
a np.array([[1, 2], [3, 4]])
b np.array([[5, 6]]) # 注意这是个二维数组
ab np.concatenate((a, b), axis0)
abarray([[1, 2],[3, 4],[5, 6]])c b.T
print(c)
# 将b翻转后再与a沿axis1连接
ac np.concatenate((a, c), axis1)
ac[[5][6]]array([[1, 2, 5],[3, 4, 6]])6.1.2 使用hstack函数
水平堆叠相当于concatenate函数的axis1
d np.array([[7], [8]])
ad np.hstack((a, d)) # 注意hstack的参数是元组类型6.1.3 使用vstack函数
垂直堆叠相当于concatenate函数的axis0
e np.array([[11, 23]])
ae np.vstack((a, e))
aearray([[ 1, 2],[ 3, 4],[11, 23]])6.2 分割数组
splithsplitvsplit
6.2.1 使用split函数
split函数沿指定轴分割成多个数组语法格式如下
numpy.split(array, indces_or_sections, axis)array要分割的数组indices_or_sections整数或数组如果是整数就用该数平均分割如果是数组则沿指定轴切片操作包含开始元素不包含结束元素axis分割轴 array [1, 2, 3, 4, 5, 6, 7, 8, 9] indice_or_sections 3; 可以分割因为9可以被3整除; 如果indices_or_sections 4; 就不能分割因为9不能被4整除; # 整数
a np.arange(9)
b np.split(a, 3)
b[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]# 数组
c np.split(a, [3, 5, 7])
c[array([0, 1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]# 二维数组
a np.array([[1, 2, 3], [4, 5, 6]])
b np.split(a, 2, axis0)
print(b)[array([[1, 2, 3]]), array([[4, 5, 6]])]c np.split(a, 3, axis1)
print(c)
print(type(c)) # 分割后的c不是numpy类型了
print(type(c[0]))[array([[1],[4]]), array([[2],[5]]), array([[3],[6]])]
class list
class numpy.ndarray6.2.2 使用hsplit与vsplit函数
相当于split函数的axis1与axis0的情况
6.3 算术运算
Numpy数组对象可以使用python原生的算术运算符加减乘除等等
形状相同的数组计算每个位置的元素独立计算数组标量数组里每个元素都与标量单独计算形状不同的数组或标量计算广播
a np.array([[1, 2], [3, 4]])
b np.array([[5, 6], [7, 8]])
a barray([[ 6, 8],[10, 12]])a * barray([[ 5, 12],[21, 32]])注意a * b并不是矩阵乘法
6.4 广播
不同形状的数组或标量计算时发生广播
6.4.1 标量广播
将标量扩展成与数组形状相同的数组再进行计算
a np.array([[1, 2], [3, 4]])
b 10
a barray([[11, 12],[13, 14]])a * barray([[10, 20],[30, 40]])6.4.2 数组广播
广播规则
如果两个数组维度不相等维度较低的数组的形状会从左侧开始填充1知道维度与较高维度的数组相等。如果两个数组维度相等要不对应轴长度相同要么其中一个长度为1则是兼容数组可以广播。长度为1的轴会被扩展。
a np.array([36, 42])
b np.array([[10, 20], [30, 40], [50, 60]])
a barray([[ 46, 62],[ 66, 82],[ 86, 102]])上面代码
一维数组a首先升维成二维数组a2a2扩展成与b相同形状
a np.array([36, 42])
c np.array([[10, 20, 30], [40, 50, 60]])
a c---------------------------------------------------------------------------ValueError Traceback (most recent call last)Cell In[14], line 31 a np.array([36, 42])2 c np.array([[10, 20, 30], [40, 50, 60]])
---- 3 a cValueError: operands could not be broadcast together with shapes (2,) (2,3) 上面代码
一维数组a首先升维成二维数组a2形状(1, 2)a2向数组b形状(2, 3)扩展(2, 2)0轴上相等了但是1轴上不相等并且a2的1轴不是1所以不能再扩展计算错误
6.5 实例
将华氏度的值转换成摄氏度公式C (5(F - 32))/9
f [0, 12, 45.21, 34, 99.91]
F np.array(f)
print(华氏度, F)
C (5 * (F - 32))/9
print(摄氏度, C)华氏度 [ 0. 12. 45.21 34. 99.91]
摄氏度 [-17.77777778 -11.11111111 7.33888889 1.11111111 37.72777778]