import numpy as np
"""
通用方法
1. reduce
2. accumulate
3. reduceat
4. outer
"""
"""
常用函数
np.abs()
np.abs()
np.fabs()
np.median()
np.sqrt()
np.square()
np.sign()
np.ceil()
np.floor()
np.rint() #四舍五入到最近的整数
np.modf() #将数组的小数和整数部分以两个独立的数组方式返回
np.isnan()
np.isfinite()
np.isinf()
np.isin(element=2,test_elements=[1,2,3])
np.power(2,3)
np.subtract([2,3,4],[1,3,5]) #数组减法
np.mod([1,23,25],[2,3,5]) #求模
aa=np.copy(np.arange(10))
np.copysign(np.arange(10),np.repeat(2,10)) #用array2d的符号array1
# 两数组的大小比较
np.greater(np.random.rand(6),np.random.rand(6))
np.less(np.random.rand(6),np.random.rand(6))
np.greater_equal(np.random.rand(6),np.random.rand(6))
np.less_equal(np.random.rand(6),np.random.rand(6))
np.equal(np.random.rand(6),np.random.rand(6))
np.not_equal(np.random.rand(6),np.random.rand(6))
# 逻辑运算
np.logical_and([1,2,3],[2,3,6])
np.logaddexp([1,2,3],[1,1,2])
np.logical_not([1,0,1,2,0,-1]) #变号是否为0
np.logical_or([1,2,3],[2,3,6])
np.logical_xor([1,2,3],[2,3,6]) #异或
"""
arrayB=np.random.rand(20)
np.any(arrayB>0.5)
arrayB.any()
"""
文件操作函数
np.save(file=,ndarray)
np.savetxt(fname=,X,fmt=,delimiter=,encoding=)
np.savez(file=,arrayA,arrayB,...)
np.load(file=)
np.loadtext(string,delimiter) #读取txt\csv文件
np.genfromtxt()
np.arange(10).tofile() #二进制格写入文件
"""
def ultimate_answer(a):
result=np.zeros_like(a)
result.flat=4
return result
myFunc=np.frompyfunc(ultimate_answer,1,1)
# 使用frompyfunc建立通用函数,输入个数,输出个数
myFunc(np.arange(4))
myFunc(np.arange(9).reshape(3,3))
"""
np.add.reduceat(a,[0,5,2,7])
第一步用到索引值列表中的0和5,实际上就是对数组中索引值在0到5之间的元素进行reduce操作。
第二步用到索引值5和2。由于2比5小,所以直接返回索引值为5的元素。
第三步用到索引值2和7。这一步是对索引值在2到7之间的数组元素进行reduce操作。
第四步用到索引值7。这一步是对索引值从7开始直到数组末端的元素进行reduce操作。
"""
arrayAA=np.arange(10)
res1=np.add.reduceat(arrayAA,[0,5,2,4,7])
res2=np.subtract.reduceat(arrayAA,[0,5,2,4,7])
"""
np.ndarray.ndim #空间维度 axes dimension
np.ndarray.shape #dimension of array
np.ndarray.size #元素个数
np.ndarray.dtype #数据类型
np.ndarray.itemsize #每个元素的字节大小
np.ndarray.data #数组数据
"""
arrayA=np.arange(15).reshape(3,5) #先列后行
print(arrayA)
print("A\' shape is:",arrayA.shape)
print(arrayA.ndim)
arrayB=np.arange(60).reshape(3,4,5) #3*4*5矩阵 3个4*5矩阵
print(arrayB)
print(arrayB.ndim)
"""
创建数组方法
"""
arrayC=np.array([2,3,4]) #dtype 32
arrayD=np.array([1.1,1.2,1.3,1.4,1.5,1.6]) #dtype 64
arrayF=np.array([(2,3,4),(3,4,5)]) #arrayF and arraryF1 is equal
arrayF1=np.array([[2,3,4],[3,4,5]])
# array.ravel() equal to array.reshape(-1) or array.flatten()
lisBB=np.random.rand(16).reshape(4,4)
lisBB.ravel()
lisBB.flatten()
lisBB.shape=(2,8)
lisBB.resize((4,4))
lisBB.T # equal to array.transpose()
lisBB.transpose()
lisB=np.arange(12).reshape(3,4)
lisC=lisB.reshape(-1) #变为一维数组
lisD=lisB.reshape(-1,1) #
lisE=lisB.reshape(-1,2)
lisAA=np.random.rand(24).reshape(2,3,4)
lisAA[:,:,2] #返回2*3数组
lisAA[0,...] #返回3*4数组
lisAA[::-1] #逆序输出
# 创建虚数
arrayE=np.array([[2,3+1j,4],[3,4+3j,5]],dtype=complex)
ComplexA=np.complex(2,2)
arrayE.imag #虚部
arrayE.real #实部
a=np.array([[1,2],[2,4]])
b=np.array([[1,3],[2,5]])
c=np.dot(a,b) #向量乘积
"""
数组、矩阵的组合和分割函数
"""
# 列组合
np.column_stack(np.array(np.random.rand(4)),np.array(np.random.rand(4)))
np.column_stack(a,b) #a,b可以为多维数组
# 矩阵水平组合
np.hstack((a,b)) # 2*2与2*2组合为2*4
np.concatenate((a,b),axis=1)
# 返回数组的唯一元素
np.unique(np.array([1,1,2,3,3,4,5,5,5]))
# 四舍五入
# np.round(arrayA,decimals=,out=)
np.round(np.random.rand(10)*10,3)
np.around(np.random.rand(10)*10) #没有设置小数点时,取最近整数值
np.rint(np.random.rand(10)*10)
np.around(np.random.rand(10)*10,decimals=2)
np.around(np.random.rand(10)*10,decimals=-1) #取整数,无小数点
# 矩阵垂直组合
np.concatenate((a,b),axis=0) # 2*2与2*2组合为4*2
np.vstack((a,b))
# 矩阵深度组合,将一系列数组按照纵轴进行层叠组合
np.dstack((a,b))
# 分割函数
# hsplit():水平方向分割
ArrayX=np.arange(24).reshape(3,8)
SplitRowArray=np.hsplit(ArrayX,8)
SplitRowArrayA=np.split(ArrayX,8,axis=1) #二者等价
# 垂直分割
np.vsplit(ArrayX,3)
np.split(ArrayX,3,axis=0) #二者等效
# 深度分割
ArrayXX=np.arange(48).reshape(3,4,4)
np.dsplit(ArrayXX,4) #
np.dsplit(ArrayXX,2)
# np.dsplit(ArrayXX,3) #Error