numpy的学习-03

数组操作

更改数组的shape

  • np.ndarry.shape可返回数组的维度
  • 修改维度可通过为shape赋值
  • np.ndarray.flat将数组转换为一维的 迭代器(首地址/数组名),并且返回的是视图(共享空间)
  • np.ndarray.flatten([order=‘C/F/A/K’])将数组转换为一维数组,并且返回的是拷贝(copy);其中C表示按行平铺,F表示按列平铺,A表示按顺序平铺,K表示按元素在内存中出现的顺序平铺
  • np.ravel(arrayname[,order='C])将数组转换为一维数组,并且返回的是视图;C/F/A/K含义同上;当order='F’时,返回的是拷贝。
  • np.reshape(arrayname,newshape[,order=‘C’])表示在不更改数据的情况下改变数组的形状,且返回视图;其中参数newshape=[rows,-1]/[-1,cols]时,形状会根据已知的行数或列数确定,参数newshape=-1时,表示数组降至一维。

例:一维数组变二维数组

x = np.array([1, 2, 9, 4, 5, 6, 7, 8])
print(x.shape)  # (8,)  获取维度
x.shape = [2, 4]  #修改维度
print(x)
# [[1 2 9 4]
#  [5 6 7 8]]

例:二维数组平铺化

import numpy as np

x = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28, 29, 30],
              [31, 32, 33, 34, 35]])
y = x.flat
print(y)
# 
for i in y:
    print(i, end=' ')
# 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

y[3] = 0
print(end='\n')
print(x)
# [[11 12 13  0 15]
#  [16 17 18 19 20]
#  [21 22 23 24 25]
#  [26 27 28 29 30]
#  [31 32 33 34 35]

数组的转置

  • np.transpose(arrayname[,axes=None])/np.ndarray.T 都表示对数组进行转置

更改数组维度

  • 使用np.newaxis参数来增加一个维度,该维度的维数必为1 numpy的学习-03_第1张图片

  • np.squeeze(arrayname[,axis=None])表示把shape中为1的维度删除;axis用于指定需要删除的维度,且该维度必为1。

数组的组合

注意:维度(一个number)指的是数组是几维,而不是形状(形状是m×n×k…)

  • np.concatenate([arrayname1,arrayname2,……],axis=0,out=None)表示对数组进行拼接;若原数组的维数相同,则拼接后维度不变;当参数axis=1时,表示按行拼接,默认情况下axis=0,表示按列拼接;拼接的数组维度必须相同。见下图例子
    numpy的学习-03_第2张图片

  • np.stack(arraynamen,axis=0,out=None)表示沿着新的轴加入一系列数组;并且维度会增加!其实也是进行数组的拼接;axis表示增加的新维度位置,默认为0,表示增加在第一维。

下图解释:x/y都是2*3的,x与y使用stack拼接必定会增加一个维度(该新维度的维数是2,由于是两个数组拼接);当x=0时,新的维度增加在第一个维度上,同理x=2,增加在第二个维度上,x=3则增加在第三个维度上;numpy的学习-03_第3张图片

  • vstack(arraynames)竖直方向合并= np.concatenate(arraynames,axis=0)
  • np.hstack(arraynames)水平方向合并=np.concatenate(arraynames,axis=1)
  • 注意:hstack可合并维度不同的,concatenate不可合并不同维度的。

数组拆分

  • np.split(arrayname,indices_or_sections,axis=0/1)进行数组拆分jia
  • np.vsplit(arrayname,indices_or_sections)垂直切分即按高度切分=np.split(arrayname,axis=0)
  • np.hsplit(arrayname,indices_or_sections)水平切分即按宽度切分=np.split(arrayname,axis=1)
    个人觉得:如果是indices=n,表示在array[n]之前切一刀;如果sections=[m,n],表示在array[m]之前切一刀,在array[n]之前切一刀,根据axis的取值切的方向不同。
x = np.array([[[11, 12, 13, 14],
              [16, 17, 18, 19],
              [21, 22, 23, 24]],
            [[1, 2, 3, 4],
              [6, 7, 8, 9],
              [2, 2, 2, 2]],
             [[111, 112, 113, 114],
              [116, 117, 118, 119],
              [211, 212, 213, 214]]])#3*3*4
y = np.split(x, [1, 3])
print(y)
[array([[[11, 12, 13, 14],
        [16, 17, 18, 19],
        [21, 22, 23, 24]]]), #x[0]
        array([[[  1,   2,   3,   4],
        [  6,   7,   8,   9],
        [  2,   2,   2,   2]],

       [[111, 112, 113, 114],
        [116, 117, 118, 119],
        [211, 212, 213, 214]]]), #x[1],x[2]
        array([], shape=(0, 3, 4), dtype=int32  #x[3]其实为空
]

数组平铺

  • np.title(arrayname,reps)其中reps=(m,n)意为把arrayname数组看成一个整体,构造一个拥有m*n个arragname数组 的大数组.
  • np.repeat(arrayname,repeats,axis=None)进行数组的复制;repeats=n时,表示复制n遍,repeats=[m,n]时,表示某行/某列复制m遍,而剩下的某行/列复制n遍;axis=0表示沿着y轴复制,增加了行数,axis=1表示沿着x轴复制,增加了列数,默认情况下axis=None时,会flatten该矩阵,变为行向量。

你可能感兴趣的:(自学,python,numpy)