python 循环添加array_Python的备忘细节小抄

最近无论是自己写程序还是看别人的开源程序,经常发现自己遗忘一些基本的Python知识,还得到网上查。遂抽出两天时间,复习(yu xi)python,把自己老容易忘掉的知识点总结成这个小抄的形式~


画图 Plot与Matplotlib 基础

Python提供了一个很像MATLAB的绘图接口。

from numpy import array
from matplotlib.pyplot import plot
a = array([1, 2, 3, 4, 5, 6, 7, 8])
plot(a, a**2)

435d4bf66591e880e0e7877ca7698544.png

plot(y)

plot(x, y) plot(x, y, format_string)
只给定 y 值,默认以下标为 x 轴:

 %matplotlib inline
x = linspace(0, 2 * pi, 50)
plot(sin(x))
plot(x, sin(x))

c036cd56a29b18c8b8a920f3728f54dd.png
plot(x, sin(x),
    x, sin(2 * x))

fd8c30c27b696eb4162320cda82bb5fe.png
plot(x, sin(x), 'b-o',
    x, sin(2 * x), 'r-^')

06a4232e548349a8fb159de088777222.png

散点图

scatter(x, sin(x))

a1f15e1ce062350f7f227ad7ba323626.png

直方图

从高斯分布随机生成1000个点得到的直方图:

hist(randn(1000))

4a5e81bf9e00ad20276c575734ef7a64.png

文件操作 File IO

写文件

f = open('路径', 'w')
f.write('1 2 3 4n')
f.write('2 3 4 5n')
f.close()

读文件

f = open('路径')
data = []
for line in f:
    data.append([field for field in line.split()])
f.close()
data

输出结果

[['1', '2', '3', '4'], ['2', '3', '4', '5']]

注:Python中有一种叫做列表推导式(List comprehension)的用法

numbers = [int(field) for field in fields]
numbers

输出结果:[1, 2, 3, 4, 5]

删除文件:

import os
os.remove('路径')

类 Class

class来定义一个类。 Person(object)表示继承自object类; __init__函数用来初始化对象; self表示对象自身,类似于CJava里面this

class Person(object):
    def __init__(self, first, last, age):
        self.first = first
        self.last = last
        self.age = age
    def full_name(self):
        return self.first + ' ' + self.last

这就涉及到为什么要用类与对象,我们可以使用人的那个类,造出好多不同的人(对象)。

Mertle = Person('Mertle', 'Sedgewick', 52)
Tom = Person('Tom', 'Swift', 28)
Tom.age

结果输出28,同理你可以得到任何已知对象的任何信息。

改变列表的方法

l.append(ob) 将元素 ob 添加到列表 l 的最后。

a = [10, 11, 12]
a.append(11)
print a

输出:[10, 11, 12, 11]

a.append([11, 12])
print a

输出:[10, 11, 12, 11, [11, 12]]

向列表添加序列:l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst

a = [10, 11, 12, 11]
a.extend([1, 2])
print a

输出:[10, 11, 12, 11, 1, 2]

插入元素:l.insert(idx, ob) 在索引 idx 处插入 ob ,之后的元素依次后移。

a = [10, 11, 12, 13, 11]
# 在索引 3 插入 'a'
a.insert(1, 'a')
print (a)

输出:[10, 'a', 11, 12, 13, 11]

移除元素:l.remove(ob) 会将列表中第一个出现的 ob 删除,如果 ob 不在 l 中会报错。

a = [10, 11, 12, 13, 11]
# 移除了第一个 11
a.remove(11)
print a

输出:[10, 12, 13, 11]

弹出元素:l.pop(idx) 会将索引 idx 处的元素删除,并返回这个元素。

a = [10, 11, 12, 13, 11]
a.pop(2)

输出:12

排序l.sort() 会将列表中的元素按照一定的规则排序。
列表反向l.reverse() 会将列表中的元素从后向前排列。

continue 语句与break 语句

遇到 continue 的时候,程序会返回到循环的最开始重新执行。
例如在循环中忽略一些特定的值:

values = [7, 6, 4, 7, 19, 2, 1]
for i in values:
    if i % 2 != 0:
        # 忽略奇数
        continue
    print (i/2)

输出为:

3.0
2.0
1.0

遇到 break 的时候,程序会跳出循环,不管循环条件是不是满足。

函数接收不定参数

使用如下方法,可以使函数接受不定数目的参数:

def add(x, *args):
    total = x
    for arg in args:
        total += arg
    return total
add(1,2,3,4)

输出为:10

通过 map 的方式利用函数来生成序列

def sqr(x): 
    return x ** 2

a = [2,3,4]
print map(sqr, a)

输出为:[4, 9, 16]

其用法为:

map(aFun, aSeq)

将函数 aFun 应用到序列 aSeq 上的每一个元素上,返回一个列表,不管这个序列原来是什么类型。

事实上,根据函数参数的多少,map 可以接受多组序列,将其对应的元素作为参数传入函数。

__name__ 属性

有时候我们想将一个 .py 文件既当作脚本,又能当作模块用,这个时候可以使用 __name__ 这个属性。

只有当文件被当作脚本执行的时候, __name__的值才会是 '__main__',所以我们可以

%%writefile ex2.py

PI = 3.1416

def sum(lst):
    """ Sum the values in a list
    """
    tot = 0
    for value in lst:
        tot = tot + value
    return tot

def add(x, y):
    " Add two values."
    a = x + y
    return a

def test():
    w = [0,1,2,3]
    assert(sum(w) == 6)
    print ('test passed.')
    
if __name__ == '__main__':
    test()

运行文件:

%run ex2.py

输出:test passed.

当作模块导入, test() 不会执行:

import ex2

但是可以使用其中的变量:

ex2.PI

输出:3.1416

也可以从模块中导入变量:

from ex2 import add, PI

使用 from 后,可以直接使用 addPI

try & except 块

写代码的时候,出现错误必不可免,即使代码没有问题,也可能遇到别的问题。一旦报错,程序就会停止执行,如果不希望程序停止执行,那么我们可以添加一对 try & except

import math

while True:
    try:
        text = raw_input('> ')
        if text[0] == 'q':
            break
        x = float(text)
        y = 1 / math.log10(x)
        print "log10({0}) = {1}".format(x, y)
   except ValueError:
        print "the value must be greater than 0"
    except ZeroDivisionError:
        print "the value must not be 1"
    except Exception:
        print "unexpected error"

except后面跟着错误类型,如果有该错误,则执行其后语句。

try/catch 块还有一个可选的关键词 finally。

不管 try 块有没有异常, finally 块的内容总是会被执行,而且会在抛出异常前执行,因此可以用来作为安全保证,比如确保打开的文件被关闭。

try:
    print 1
finally:
    print 'finally was called.'

输出:

1
finally was called.

numpy画图

linspace 用来生成一组等间隔的数据:

a = linspace(0, 2*pi, 21)
%precision 3
a

输出

array([0.   , 0.314, 0.628, 0.942, 1.257, 1.571, 1.885, 2.199, 2.513,
       2.827, 3.142, 3.456, 3.77 , 4.084, 4.398, 4.712, 5.027, 5.341,
       5.655, 5.969, 6.283])

三角函数,作图

b = sin(a)
%matplotlib inline
plot(a, b)

e5d90a93e47b4e47eccfe4506495f212.png

数组求和

a = array([[1,2,3], 
           [4,5,6]])
sum(a)

输出21

指定求和的维度:
沿着第一维求和:

sum(a, axis=0)

输出:array([5, 7, 9])

沿着第二维求和

sum(a, axis=1)

输出:array([ 6, 15])

沿着最后一维求和

sum(a, axis=-1)

输出:array([ 6, 15])

求最大最小值的位置

a.argmin()

输出0

近似到一位小数:

round方法

a = array([1.35, 2.5, 1.5])
a.round()

输出:array([ 1., 2., 2.])

a.round(decimals=1)

输出:array([ 1.4, 2.5, 1.5])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值