numpy数组常用处理函数

admin 2024年8月6日13:17:13评论3 views字数 3684阅读12分16秒阅读模式

numpy数组常用处理函数

  • numpy 数组是python机器学习常用的数据结构,在这里简单记下常见的使用方法和一些初学时遇到的问题
  1. 注意事项
  • 使用数组时不要犯低级错误,注意行数和列数,不要搞反了。
  • np.array转化宽度不一致的数组时会出现未知错误,使用时要谨慎。
  • numpy使用元组作为引用,容易和多维数组按层拆分搞混,多维数组不支持元组索引(numpy也支持按层拆分)如:a[1,2]b[1][2]
  • 注意矩阵乘法转置。
  • 注意numpy不是默认二维数组, 若矩阵为向量,则只有shape[0](即向量长度为shape[0]而不是它作为矩阵时的shape[1]): [1,2,3,4] 看作矩阵: shape:[1,4] 看作向量:shape:[4]
  • 在维度不匹配的时候可以加上shape先判断。
  • 矩阵第一个参数为行数,第二个为列数…申请空白2维矩阵:(0,2)
  • 添加新行:
    np.append(red,[vx],axis=0)此处的vx必须升维到与大矩阵相同,axis表示添加一行
    yellow=np.r_[yellow,[vx]],道理同上
  1. python代码
    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
    a = [1,2,3] b = [4,5,6] c = [4,5,6,7,8] zipped = zip(a,b) # 打包为元组的列表 [(1, 4), (2, 5), (3, 6)]  zip(a,c) # 元素个数与最短的列表一致 [(1, 4), (2, 5), (3, 6)]  zip(*zipped)  # 与 zip 相反,可理解为解压,返回二维矩阵式 [(1, 2, 3), (4, 5, 6)]X=np.array([[1,2,3][4,5,6]])a=np.arange(9).reshape(3,3)aOut[31]: array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])'''注意,由于数组可以为高维,所以在此处需要用元组来包裹其尺寸。'''Z0 = np.zeros((2,2))  # Create an array of all zerosprint Z0              # Prints "[[ 0.  0.]                     #          [ 0.  0.]]"                     z1=np.empty((2,))b = np.ones((1,2))   # Create an array of all onesprint b              # Prints "[[ 1.  1.]]"c = np.full((2,2), 7) # Create a constant arrayprint c               # Prints "[[ 7.  7.]                      #          [ 7.  7.]]"I = np.eye(2)        # Create a 2x2 identity matrixprint I              # Prints "[[ 1.  0.]                     #          [ 0.  1.]]"e = np.random.random((2,2)) # Create an array filled with random valuesprint e                     # Might print "[[ 0.91940167  0.08143941]#  [ 0.68744134  0.87236687]]"扩展矩阵函数tile()np.tile(a,(m,n))>>>x=np.array([0,0,0])>>> x[[0, 0, 0]]>>> tile(x,(3,1))           #即将x扩展3个,j=1,表示其列数不变matrix([[0, 0, 0],        [0, 0, 0],        [0, 0, 0]])>>> tile(x,(2,2))           #x扩展2次,j=2,横向扩展matrix([[0, 0, 0, 0, 0, 0],        [0, 0, 0, 0, 0, 0]])'''矩阵合并函数'''hstack : Stack arrays in sequence horizontally (column wise).vstack : Stack arrays in sequence vertically (row wise).dstack : Stack arrays in sequence depth wise (along third axis).concatenate : Join a sequence of arrays together.r_ : Translates slice objects to concatenation along the first axis.c_ : Translates slice objects to concatenation along the second axis.'''使用np.c_[]和np.r_[]分别添加行和列注:该方法只能将两个矩阵合并,不会改变原矩阵的维度'''np.c_[a,b]'''将b以列的形式拼接至a的后面'''### 推荐用法:newarray=numpy.insert(arr, obj, values, axis=None) '''arr:被插入的矩阵obj:要被插入的行(列)位置,将会插入到它的前一行(列)values:插入值(矩阵)axis:轴值,若未填入则矩阵会被展开,为0则插入行,1则插入列。'''array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])'''取矩阵的某一行'''a[1]Out[32]: array([3, 4, 5])'''取矩阵的某一列'''a[:,1]Out[33]: array([1, 4, 7])a.reshape(3, 4, -1)a.T # 转置a.transpose() # 转置numpy.linalg.inv(a) # 求逆a.diagonal([offset, axis1, axis2]) # 对角元np.linalg.norm(np_c1 - np_c2) #计算点c1和c2之间的欧式距离(一个点为一行)numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)# 返回均匀相隔的一组数据(num个):Out:[start,start+step…]

对数据点按标记值创建分类组

12345678910
import numpy as np # 注:必须要numpy才能成功x = np.array([1, 2, 3, 4])y = np.array([1, 0, 0, 2])test = x[y == 0]print(test)'''输出:[2 3]'''

shuffle_data函数(对整个数据集进行洗牌,但x与y绑定)

123456789101112
import numpy as np def shuffle_data(train_data, train_target):    batch_size= len(train_target)    index = [i for i in range(0, batch_size)]    np.random.shuffle(index)    batch_data = []    batch_target = []    for i in range(0, batch_size):        batch_data.append(train_data[index[i]])        batch_target.append(train_target[index[i]])    return batch_data, batch_target

填充

1234567891011121314151617181920212223242526272829303132333435
# 直接用lenth=10a=np.array([[6,6],           [6,6]])a=np.pad(a,((0,0),(0,lenth-a.shape[1])),         'constant', constant_values=0)'''[[6 6 0 0 0 0 0 0 0 0] [6 6 0 0 0 0 0 0 0 0]]'''# 其他详细操作a=np.array([[6,6],           [6,6]])b=np.pad(a,((1,2),(3,4)),         'constant', constant_values=(0, 1))print(b)'''[[0 0 0 0 0 1 1 1 1] [0 0 0 6 6 1 1 1 1] [0 0 0 6 6 1 1 1 1] [0 0 0 1 1 1 1 1 1] [0 0 0 1 1 1 1 1 1]]'''a=np.array([[6,6],           [6,6]])b=np.pad(a,((0,0),(0,4)),         'constant', constant_values=( 0))print(b)'''[[6 6 0 0 0 0] [6 6 0 0 0 0]]'''

二进制保存

1234567
m=np.array(n)m.tofile('test/m.bin')...m=fromfile('test/m.bin',dtype=np.float).reshape(-1,x,x)np.save('test/m.npy',m)m=np.load('test/m.npy')

- source:hachp1.github.io

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月6日13:17:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   numpy数组常用处理函数http://cn-sec.com/archives/3038696.html

发表评论

匿名网友 填写信息