广播(Broadcast)是numpy对不同形状(shape)的数组进行数值计算的方式
当运算中的2个数组的形状不同时,numpy将自动触发广播机制
实例:
import numpy as np
a = np.array([[0, 0, 0], [10, 10, 10], [20, 20, 20], [30, 30, 30]])
b = np.array([1, 2, 3])
print(a + b)
'''
输出
[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]
'''
函数格式 | 函数作用 |
---|---|
numpy.reshape(arr,newshape,order=‘C’) | numpy.reshape函数可以在不改变数据的条件下修改形状 |
numpy.transpose(arr,axes) | numpy.transpose函数用于对换数组的维度 |
numpy.ndarray.T | 转质 |
numpy.squeeze(arr,axis) | numpy.squeeze函数从给定数组的形状中删除一维的条目(移除长度为1的轴) |
numpy.concatenate((a1,a2,...),axis)
⚫a1,a2,…:相同类型的数组
⚫axis:沿着它连接数组的轴,默认为0
实例
import numpy as np
a = np.array([[1, 2], [3, 4]])
print('第一个数组:')
print(a)
b = np.array([[5, 6], [7, 8]])
print('第二个数组:')
print(b) # 两个数组的维度相同
print('沿轴0连接两个数组:')
print(np.concatenate((a,b)))
print('\n')
print('沿轴1连接两个数组:')
print(np.concatenate((a,b),axis=1))
'''
输出
第一个数组:
[[1 2]
[3 4]]
第二个数组:
[[5 6]
[7 8]]
沿轴0连接两个数组:
[[1 2]
[3 4]
[5 6]
[7 8]]
沿轴1连接两个数组:
[[1 2 5 6]
[3 4 7 8]]
'''
numpy.stack(arrays,axis)
⚫arrays相同形状的数组序列
⚫axis:返回数组中的轴,输入数组沿着它来堆叠
会增加一个新的轴(立体阵)
// An highlighted block
import numpy as np
a = np.array([[1, 2], [3, 4]])
print('第一个数组:')
print(a)
b = np.array([[5, 6], [7, 8]])
print('第二个数组:')
print(b)
print('沿轴0堆叠两个数组:')
print(np.stack((a, b), 0))
print('沿轴1堆叠两个数组:')
print(np.stack((a, b), 1))
print('沿轴2堆叠两个数组:')
print(np.stack((a, b), 2))
'''
输出
第一个数组:
[[1 2]
[3 4]]
第二个数组:
[[5 6]
[7 8]]
沿轴0堆叠两个数组:
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
沿轴1堆叠两个数组:
[[[1 2]
[5 6]]
[[3 4]
[7 8]]]
沿轴2堆叠两个数组:
[[[1 5]
[2 6]]
[[3 7]
[4 8]]]
numpy.vstack
import numpy as np
a = np.array([[1, 2], [3, 4]])
print('第一个数组:')
print(a)
b = np.array([[5, 6], [7, 8]])
print('第二个数组:')
print(b)
print('水平堆叠:')
c = np.hstack((a, b))
print(c)
d = np.vstack((a, b))
print(d)
'''
输出
第一个数组:
[[1 2]
[3 4]]
第二个数组:
[[5 6]
[7 8]]
水平堆叠:
[[1 2 5 6]
[3 4 7 8]]
[[1 2]
[3 4]
[5 6]
[7 8]]
进程已结束,退出代码0
'''
numpy.append函数在数组的末尾添加值。追加操作会分配整个数组,并把原来的数组复制到新数组中。
下面展示一些 内联代码片
。
numpy.append(arr,values,axis=None)
•arr:输入数组
•values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
•axis:默认为None。当axis无定义时,是横向加成,返回总是为一维数组!当axis为0时,数组是加在下边(列数要相同);当axis为1时,数组是加在右边(行数要相同)。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print('第一个数组:')
print(a)
print('向数组添加元素:')
print(np.append(a, [7, 8, 9]))
print('沿轴0添加元素:')
print(np.append(a, [[7, 8, 9]], axis=0))
print('沿轴1添加元素:')
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1))
'''
输出
第一个数组:
[[1 2 3]
[4 5 6]]
向数组添加元素:
[1 2 3 4 5 6 7 8 9]
沿轴0添加元素:
[[1 2 3]
[4 5 6]
[7 8 9]]
沿轴1添加元素:
[[1 2 3 5 5 5]
[4 5 6 7 8 9]]
'''
ufunc是universalfunction的缩写,它是一种能对数组的每个元素进行运算的函数。
通过np.frompyfunc()可以将计算单个值的函数转换为能对数组的每个元素进行计算的ufunc函数
f_ufunc=np.frompyfunc(f,nin,nout)
f是计算单个元素的函数,nin是func的输入参数的个数,nout是func的返冋值的个数,f_ufunc是ufunc函数对象,作为一个新的函数,它实现了f函数的ufunc功能。f_ufunc()的调用格式为:y=f_ufunc(与f中定义的形参对应的实际参数)
实例:
import numpy as np
def f(a,b,c,x):
#计算二次函数的值
return a*x**2+b*x+c
a,b,c=1,0,7
#传入参数
x=np.array([0,1,2])
#创建数组
f_ufunc=np.frompyfunc(f,4,1)
#输入4个变量a,b,c和x,输出1个参数计算之后的列表
y=f_ufunc(a,b,c,x)
#调用函数
print(y.dtype)
y=y.astype(np.float)
print(y.dtype)
print(y)
'''
输出:
object
float64
[ 7. 8. 11.]
'''
按指定轴统计时,在函数内加入axis = 轴名 即可
例如:max(axis=1)#axis=1按行 axis=0为按列
实例
import numpy as np
x = np.arange(9.).reshape(3, 3)
print('我们的数组是:')
print(x)
print('大于3的元素的索引:')
y = np.where(x > 3)
print(y)
print('使用这些索引来获取满足条件的元素:')
print(x[y])
'''
输出:
我们的数组是:
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]]
大于3的元素的索引:
(array([1, 1, 2, 2, 2], dtype=int64), array([1, 2, 0, 1, 2], dtype=int64))
使用这些索引来获取满足条件的元素:
[4. 5. 6. 7. 8.]
'''
用来计算分段函数之类的问题