【Day 26】NumPy (3):Slicing, Copy, View, shape, Concatenate

前言

今天要来继续介绍 NumPy 的应用,包括了 Slicing 索引,Copy, View 复制, Shape, Reshape, Concatenate 等等内容。

NumPy

Slicing

NumPy 中的矩阵,也可以透过像 list 一样的方法去取出。
语法一样也是 [start:end:step]

如图,取出这个矩阵的第 1 个到第 4 个元素

import numpy as np

array1 = np.array([1, 2, 3, 4, 5, 6, 7, 8])

print(array1[1:5])

# 输出
# [2 3 4 5]

Slicing 2-D Arrays

在 2-D 的矩阵也可以使用 Slicing 来取出元素,如下程序为取出第一个 row 的 1-2 个元素。

import numpy as np

array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(array1[1, 1:3])

# 输出
# [6 7]

底下为取出第 0-1 个 row,并取出他们的第 1-2 个元素。

import numpy as np

array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(array1[0:2, 1:3])

# 输出
# [[2 3]
#  [6 7]]

复制矩阵:Copy & View

这两个函式的差别在於,.copy() 是复制一个新的 array,所以改变 copy 後的 array 并不会改变到原本的 array,.view() 是给你看到原本的矩阵而已,所以改变的话会把原本的 array 也改变。我们看一下底下的例子会更清楚。

  • .copy()

    底下 array1 为原本的 array,并且用 .copy() 函式来复制一个一样的 array 给 x,这时若改变 x,并不会对原本的 array1 造成影响。

    import numpy as np
    
    array1 = np.array([1, 2, 3, 4])
    x = array1.copy()
    x[0] = 4
    
    print(x)         # [4 2 3 4]
    print(array1)    # [1 2 3 4]
    
  • .view()

    底下 array1 为原本的 array,并且用 .view() 函式来把 array1y 看见,这时若改变 y,相当於改变了 array1

    import numpy as np
    
    array1 = np.array([1, 2, 3, 4])
    y = array1.view()
    y[0] = 4
    
    print(y)         # [4 2 3 4]
    print(array1)    # [4 2 3 4]
    

Shape

  • 得到矩阵的 dimesions

    使用 .shape 函式,可以得到现在这个 array 的 dimesions,像底下就代表这个 array 有 2 个 dimesions,并且每个 dimesions 有 4 个 element。

    import numpy as np
    
    array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    
    print(array1.shape)
    
    # 输出
    # (2, 4)
    

    也可以透过这个函式调整 array 的维度,把它改为 4 x 2 的 array,他会直接改变原本的 array

    import numpy as np
    
    array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    array1.shape = (4, 2)
    
    print(array1)
    
    # 输出
    # [[1 2]
    #  [3 4]
    #  [5 6]
    #  [7 8]]
    

reshape

调整 array 的维度,但不会改变原本的 array,而是创建一个副本。

import numpy as np

array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
y = array1.reshape(4, 2)

print(array1)
# 输出
# [[1 2 3 4]
#  [5 6 7 8]]
print(y)
# 输出
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

NumPy 中的常数

代号 数字
Inf = inf = infty = Infinity = PINF 正无限大 +∞
NINF 负无限大 -∞
PZERO 正 0
NZERO 负 0
nan = NaN = NAN 非数值
e 自然数 e
pi π
newaxis None 的别称
print(np.inf)
print(np.NINF)
print(np.PZERO)
print(np.NZERO)
print(np.nan)
print(np.e)
print(np.pi)
print(np.euler_gamma)
print(np.newaxis)

# 输出
# inf
# -inf
# 0.0
# -0.0
# nan
# 2.718281828459045
# 3.141592653589793
# None

合并阵列

  • np.concatenate():如果需要把两个 array 合并的时候,就可以使用这个函式。

    a = np.array([1, 2, 3, 4])
    b = np.array([5, 6, 7, 8])
    
    print(np.concatenate([a, b]))
    
    # 输出
    # [1 2 3 4 5 6 7 8]
    

结语

NumPy 真的太多函式可以使用,今天就先暂时介绍到这边了!明天再继续。

待续...


<<:  【Day 29】Class

>>:  Day 26: Insertion sort & Selection sort

印表机维修五种常见故障,若遇到问题就能先自己排除了

印表机维修常见故障问题,原因分析:对於喷墨印表机,可能有两方面原因:1.墨盒墨尽;2.印表机长时间不...

Updated and Reliable Tableau Desktop-Specialist BrainDumps

If you are expecting to clear the Tableau Desktop ...

Day01网页设计入门笔记-前言

前言 一开始没接触过程序的人应该都会有个疑问 那就是第一个语言我该从哪个程序语言开始学起呢? 但是我...

Day21. Blue Prism 有事不再找老大,自己搞定 -BP 的Exception Type 与Exception Handling

常听说出事了就想找老大摆平, 结果在群内的地位越来越低, 如果能试着自己处理问题, 把事情Handl...

Ruby基本介绍(五之二)-two sum解法

年轻人才做选择,我都要! 工程师会命令电脑选择甲方要的.... 题目连结:https://leetc...