1. python基础

1.3 python入门

1.3.2 查看数据类型

使用type()

1
2
3
4
5

type(10.04)

## float

1.3.4 列表基本用法

如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14

a=[1,2,3,4,5]
print(a)
print(len(a))
a[0]
a[4]
a[4]=99
print(a)

## [1, 2, 3, 4, 5]
## 5
## [1, 2, 3, 4, 99]


元素访问 切片

从0开始

“:”代表切片

:前代表开始元素,后代表结束元素

前后都可用正负,正表示第几个,负表示相对于n的距离。故-1代表n-1,代表最后一个元素。

例:

1
2
3
4
5
6
7
8
9
10
11

a=[1,2,3,4,99]

print(a[-4:-1])

## [2, 3, 4]

print(a[-3:])

## [3,4,99]

:前后留空,则
前空代表从头开始
后空代表遍历到结尾

若超出范围,返回空列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

print(a)
print(a[0:2])
print(a[1:])
print(a[-4:-1])
print(a[-3:])
print(a[:])

##    [1, 2, 3, 4, 99]
##    [1, 2]
##    [2, 3, 4, 99]
##    [2, 3, 4]
##    [3, 4, 99]
##    [1, 2, 3, 4, 99]

1.3.5 字典

key-value形式存储

访问时用中括号,下标使用key部分值

例如

1
2
3
4
5
6
7
8
9
me={'height':180,2:160}
print(me['height'])
print(me)
print(me[2])

## output:
## 180
## {'height': 180, 2: 160}
## 160

这里的2就代表了me的关键词为2的项目,它的值是160

需要注意的是,如果使用不存在的键进行访问,会引发 KeyError 异常。为了避免这种情况,可以使用字典的 get() 方法,它允许提供默认值,当键不存在时返回该默认值。例如:

1
2
3
me = {"weight": 70, "height": 180}
age = me.get("age", 0)
print(age)  # 输出:0

在上面的例子中,我们使用 get() 方法来获取键 “age” 对应的值,如果键不存在,则返回默认值 0。这样可以避免出现 KeyError 异常。

默认值若不指定,则为None

1
2
3
4
5
6
7
8
9
10
11

me={'height':180,2:160}
print(me['height'])
print(me)
print(me[2])
print(me.get("age"))
## 180
##    {'height': 180, 2: 160}
##    160
##    None

1.3.6 bool

以下是很有意思的一段代码

1
2
3
4
5
6
7
8
flag=True
flag=not flag
print(flag)
flag=~flag
print(flag)
flag=~flag
print(flag)

代码中,首先定义了一个bool类型的flag。

  1. 对其取非输出,输出是False,没毛病。

  2. 对其再进行取反输出,这时候输出是-1

  3. 对其再进行取反输出,这时候输出是0,

可见,对布尔类型只能使用and,or,not操作

使用取反操作会出现类型转换,使得布尔类型变成整数类型,从而输出0000 0000按位取反结果,是FFFF FFFF,在补码中表示-1,与输出吻合。

再进行取反,结果就是0000 0000,输出是0。

同样,对True类型进行按位取反,表示对0000 0001按位取反,结果是FFFF FFFE,补码表示-2。对True进行取反取反输出,结果就是0000 0001,输出整型1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

flag=True
flag=not flag
print(flag)
print(~flag)
print(~~flag)
flag2=True
print(~flag2)
print(~~flag2)

##    False
##    -1
##    0
##    -2
##    1

1.3.8 for语句

记得后面有个冒号,循环体内要缩进

1
2
3
4
5
6
for i in [1,2,3]:
    print(i)
   
##   1
##    2
##    3

1.3.9 函数

1
2
3
4
def hello(object="World"):
    print("Hello "+object+" !")
hello()
hello("CAT")

这里第一句使用了默认参数,输出Hello World !

第二句传入参数,输出Hello CAT !

1
2
3
4
5
6
7
8
9

def hello(object="World"):
    print("Hello "+object+" !")
hello()
hello("CAT")

##    Hello World !
##    Hello CAT !

1.4.2 Class类

1
2
3
4
5
6
7
8
9
10
11

class 类名
def __init__(self, 参数, …): # 构造函数
...

def 方法名1(self, 参数, …): # 方法1
...

def 方法名2(self, 参数, …): # 方法2
...

  1. 构造函数 __init__(self,parameters...)

   这个函数在构造类的时候执行一次,根据参数和构造函数来 赋初值

  1. 方法s: 可以给类里面不同的方法定义不同的功能。类似于类里面的函数。注意第一个参数必须是显式的self

   在 Python 类的方法中,self 是一个特殊的参数,用于引用当前对象实例。它是约定俗成的命名,但实际上可以使用任何名称。如果在类的方法中不指定 self 参数,会导致以下问题:

    1. 访问不到对象的属性和方法:在类的方法中,如果没有指定 self 参数,将无法访问到对象的属性和其他方法。这是因为没有指定 self 参数,无法确定当前对象实例的引用。

    2. 无法修改对象的属性:没有 self 参数,无法通过引用对象实例来修改对象的属性。对象的属性只能通过类方法或实例方法中的 self 参数进行修改。

    3. 无法调用其他方法:在类的方法中,如果没有指定 self 参数,无法调用其他方法。因为没有指定 self 参数,无法确定调用哪个对象实例的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

class Man:
    def __init__(self, name):
        self.name = name
        print("Initialized!")
    def hello(self):
        print("Hello " + self.name + "!")
    def goodbye(self):
        print("Good-bye " + self.name + "!")
m = Man("David")
m.hello()
m.goodbye()
##    Initialized!
##    Hello David!
##    Good-bye David!

1.5 Numpy

1.5.2 NumPy数组

使用numpy.array(...)创建NP数组,

创建出来的数组类型是numpy.ndarray

1
2
3
4
5
6
7
import numpy as np
x=np.array([1.0,2.0,3.0])
print(x)
type(x)

## [1. 2. 3.]
##    numpy.ndarray

1.5.3 NumPy element-wise

前提:X和Y的维数必须一致,才可进行算术运算。

element-wise是按元素进行操作,即X的某一元素Y的对应元素进行算术运算

1
2
3
4
5
6
7
8
9
10
x=np.array([1.0,2.0,3.0])
y=np.array([2.0,4.0,6.0])

print(x+y)
print(x*y)
print(x/y)

##    [3. 6. 9.]
##    [ 2.  8. 18.]
##    [0.5 0.5 0.5]

1.5.4 NumPy的N维数组

注意,多维数组是对某一元素进行扩展。即首先是个Array,最外层应该由中括号包起来,然后内层根据需要扩展维数。

A.shape即A的shape元组来查看维数,

A.dtype即A的numpy.dtype[int32][1]来查看数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

A=np.array([ [1,2],
             [3,4],
             [5,6]])
print(A)
print(type(A.shape))
print(A.shape)
print(type(A.dtype))
print(A.dtype)

##    [[1 2]
##     [3 4]
##     [5 6]]
##    <class 'tuple'>
##    (3, 2)
##    <class 'numpy.dtype[int32]'>
##    int32

对于多维数组,也可进行element-wise运算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
A=np.array([ [1,2],
             [3,4],
             [5,6]])
B=np.array([ [1,2],
            [3,4],
            [5,6]])
print(A+B)
print(A*B)

##    [[ 2  4]
##     [ 6  8]
##     [10 12]]
##    [[ 1  4]
##     [ 9 16]
##     [25 36]]

1.5.5 广播

即将标量通过扩展,形成和向量同维度的,所有元素均为标量值的向量,然后对这两个向量进行element-wise算术运算。

注意,一般是中括号内部对齐。即A的中括号内第一个元素,与B的中括号第一个元素进行广播相乘。

1
2
3
4
5
6
7
8
9

A=np.array([ [1,2],
             [3,4],
             [5,6]])
B=np.array([ 10,20])
print(A*B)
##    [[ 10  40]
##     [ 30  80]
##    [ 50 120]]

1.5.6 访问元素

A=np.array([ [1,2],[3,4],[5,6]])

  1. 按照中括号内进行索引,从0开始编号。

   A[0]  A[0][3]

  1. 使用for语句

   

1
2
3
4
5
6
7
8

    for row in A:
        print(row)

    ## [1 2]
    ## [3 4]
    ## [5 6]

  1. 使用数组法

   print(A[0,1])

   ## 2

由访问元素,可以批量进行某些运算。

1
2
3
4
5
6
7

A>4

## [[False False]
## [False False]
## [ True  True]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

A=np.array([ [1,2],
             [3,4],
             [5,6]])
print(A[0])
print((A))
for row in A:
    print(row)
print(A[0,1])
print(A>4)

##    [1 2]
##    [[1 2]
##     [3 4]
##     [5 6]]
##    [1 2]
##    [3 4]
##    [5 6]
##    2
##    [[False False]
##     [False False]
##     [ True  True]]

1.6 Matplotlib 图像绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(0,6,0.1)
y1=np.sin(x)
y2=np.cos(x)
plt.plot(x,y1,label="sin")
plt.plot(x,y2,linestyle="--",label="cos")

plt.xlabel("x")
plt.ylabel("Y")
plt.title('sin&cos')
plt.legend()        #添加图例

plt.show()

sin&cos

1.6.3 显示图像

1
2
3
4
5
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('titanic.jpg')
plt.imshow(img)
plt.show()

image

  1. numpy.dtype[int32] 是 NumPy 库中的数据类型对象,表示一个具体的数据类型。在这种情况下,int32 表示一个 32 位整数的数据类型。

1. python基础
http://blog.jiuge.host/post/20231230113500.html
作者
Pigeon.🕊
发布于
2023年12月30日
许可协议
CC BY-NC-SA 3.0