Numpy详解

基本类型(array)

        array是numpy中最基础的数据结构,最关键的属性是维度和元素类型

    a = [1, 2, 3, 4]
    b = np.array(a)
    print(type(b))
    print(b.shape)
    print(b.argmax())   返回array中数值最大数的下标,默认将输入array视作一维,出现相同的最大,返回第一次出现的。
    print(b.max())
    print(b.mean())
----------结果----------------
<class 'numpy.ndarray'>
(4,)
3
4
2.5

        二位数组

np.max:(a, axis=None, out=None, keepdims=False) 
求序列的最值
最少接收一个参数
axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
    c = [[1, 2], [3, 4]]
    d = np.array(c)
    print(d.shape)
    print(d.size)
    print(d.max(axis=0))     最后一个维度上的最大值,array([3, 4])
    print(d.max(axis=1))
    print(d.mean(axis=0))   
    print(d.flatten())       展开一个numpy数组为1维数组,array([1, 2, 3, 4])
    print(np.ravel(c))       可以解析的结构为1维数组,array([1, 2, 3, 4])
------------结果--------------
(2, 2)
4
[3 4]
[2 4]
[2. 3.]
[1 2 3 4]
[1 2 3 4]

         函数示例:

    print(np.ones((3, 3), dtype=np.float_))   #3x3的浮点型2维数组,并且初始化所有元素值为1
    print(np.repeat(3, 4))                    # 创建一个一维数组,元素值是把3重复4次,array([3, 3, 3, 3])
    g = np.zeros((2, 2, 3), dtype=np.uint8)   # 2x2x3的无符号8位整型3维数组,并且初始化所有元素值为0
    print(np.zeros(g.shape))                  
    print(g.astype(np.float_))
    print(np.arange(10))
    print(np.linspace(0, 6, 5))              # 等差数列,0到6之间5个取值,array([ 0., 1.5, 3., 4.5, 6.])
    p = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8]])
    np.save('p.npy', p)
    print(np.load('p.npy'))
--------------结果------------------
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[3 3 3 3]
[[[0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]]]
[[[0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]]]
[0 1 2 3 4 5 6 7 8 9]
[0.  1.5 3.  4.5 6. ]
[[1 2 3 4]
 [5 6 7 8]]

       函数示例:

    a = np.arange(24).reshape((2, 3, 4))
    print(a)
    print(a[1][1][1])
    print(a[:, 2, :])
    print(a[..., 1])
    print(a[:, 1:, 1:-1])
    print(np.split(np.arange(9), 3))
    print(np.split(np.arange(9), [2, -3]))
    c = np.split(np.arange(6), [2, 3])
    d = np.split(np.arange(6, 12), [2, 3])
    print(c)
    print(d)
-------------------结果--------------------------
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
17
[[ 8  9 10 11]
 [20 21 22 23]]
[[ 1  5  9]
 [13 17 21]]
[[[ 5  6]
  [ 9 10]]

 [[17 18]
  [21 22]]]
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
[array([0, 1]), array([2, 3, 4, 5]), array([6, 7, 8])]
[array([0, 1]), array([2]), array([3, 4, 5])]
[array([6, 7]), array([8]), array([ 9, 10, 11])]

 函数示例

    array = np.arange(24).reshape(2, 3, 4)
    print(array.transpose((0, 1, 2)))
    print("转换后")
    print(array.transpose((1, 0, 2)))

--------------结果-----------------------
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
转换后
[[[ 0  1  2  3]
  [12 13 14 15]]

 [[ 4  5  6  7]
  [16 17 18 19]]

 [[ 8  9 10 11]
  [20 21 22 23]]]

  transpose究竟做了什么?首先对三维数组的维数(2,3,4)依次编号0,1,2,称之为0-轴,1-轴,2-轴。transpose(1,0,2)表示对换了1-轴和0-轴(本来应该是0,1,2)的位置,2-轴没变。也就是说tranpose会将下标(i,j,k)对应的元素变换到下标(j,i,k)上。例如三维数组元素11的原来下标位置是(0,2,3),通过transpose应该变换到(2,0,3)的位置上,变化后的数组(2,0,3)的位置上确实是11。

# 绝对值,1
a = np.abs(-1)

# sin函数,1.0
b = np.sin(np.pi/2)

# tanh逆函数,0.50000107157840523
c = np.arctanh(0.462118)

# e为底的指数函数,20.085536923187668
d = np.exp(3)

# 2的3次方,8
f = np.power(2, 3)

# 点积,1*3+2*4=11
g = np.dot([1, 2], [3, 4])

# 开方,5
h = np.sqrt(25)

# 求和,10
l = np.sum([1, 2, 3, 4])

# 平均值,5.5
m = np.mean([4, 5, 6, 7])

# 标准差,0.96824583655185426
p = np.std([1, 2, 3, 2, 1, 3, 2, 0])

 线性代数模块(linalg)

      

posted on 2022-03-22 09:34  溪水静幽  阅读(78)  评论(0)    收藏  举报