0%

“&” 的使用方法(最推荐大家使用它了,容错率最好)

1
command 1 & command 2 & command 3......

可以同时执行多条命令,即使这3个命令中有任何一个执行失败,其他任意2个命令都会执行成功。abcd命令是一个不存在的错误命令,就是显示下效果。如图所示:

“&& “的使用方法

1
command 1 && command 2 && command 3......

可以同时执行多条命令,如果这3个中有一处命令执行失败,那么当碰到执行失败的命令之后的其他任何命令都不会被执行。第一个calc命令会被正确执行,第二个abcd是不存在的错误命令,它执行失败后,第三个mspaint(画图程序)命令及之后的其他任何命令都不会被执行。如图:

“|” 的使用方法(这个方法的使用意义最不大,容错率为0)

1
command 1 | command 2 | command 3......

可以同时执行多条命令,这些命令中只要有一个错误的命令,不管是第几条命令,所有的命令都不会被执行。

“||” 的使用方法

1
command 1 || command 2 || command 3......

可以同时执行多条命令,无论有多少个命令并存,只要多条命令中有一个命令被正确执行,其他的任何命令都不会被执行。下图中第一条abcd是不存在的错误命令,但是第二条calc命令被正确执行,那么之后的mspaint命令不会再被执行,即使后面多条命令都是正确的。它只执行一条正确的命令。

2022-03-10更新:

Date Code Name Price1 Price2 中间价
2022-03-10 00:00:00 300094.SZ 国联水产 5 5.5 5.25
2022-03-10 00:00:00 600986.SH 浙文互联 5 5.5 5.25
2022-03-10 00:00:00 600138.SH 中青旅 11 11.6 11.3
2022-03-10 00:00:00 002550.SZ 千红制药 4.5 4.9 4.7
2022-03-07 00:00:00 002217.SZ 合力泰 3.5 3.6 3.55
2022-03-04 00:00:00 002183.SZ 怡亚通 5.2 5.35 5.275
2022-03-03 00:00:00 002440.SZ 闰土股份 8.6 8.88 8.74
2022-03-02 00:00:00 002422.SZ 科伦药业 17 17.5 17.25
2022-03-01 00:00:00 300466.SZ 赛摩智能 5.9 6.07 5.985
2022-02-28 00:00:00 002170.SZ 芭田股份 6 6.1 6.05
2022-02-24 00:00:00 600409.SH 三友化工 8.5 8.8 8.65
2022-02-24 00:00:00 601678.SH 滨化股份 7 7.3 7.15
2022-02-23 00:00:00 603838.SH 四通股份 6.8 7 6.9
2022-02-22 00:00:00 603000.SH 人民网 13.5 14 13.75
2022-02-22 00:00:00 002092.SZ 中泰化学 10 10.4 10.2
2022-02-21 00:00:00 601992.SH 金隅集团 2.85 2.95 2.9
2022-02-16 00:00:00 600763.SH 通策医疗 145 153 149
2022-02-16 00:00:00 601828.SH 美凯龙 8.3 8.55 8.425
2022-02-15 00:00:00 603533.SH 掌阅科技 18.5 19.2 18.85
2022-02-10 00:00:00 002042.SZ 华孚时尚 4.5 4.75 4.625
2022-02-08 00:00:00 000837.SZ 秦川机床 9 9.2 9.1
2022-01-28 00:00:00 600031.SH 三一重工 19 20.5 19.75
2022-01-28 00:00:00 600425.SH 青松建化 3.3 3.6 3.45
2022-01-18 00:00:00 600881.SH 亚泰集团 3.2 3.3 3.25
2022-01-13 00:00:00 002697.SZ 红旗连锁 5.4 5.7 5.55
2022-01-10 00:00:00 603020.SH 爱普股份 12 13.5 12.75
2022-01-05 00:00:00 000617.SZ 中油资本 5 5.2 5.1

2022-03-08复盘

2022/1/13 红旗连锁 5.4 5.7 中线 社区团购,地摊经济,新零售,彩票概念,参股银行,预制菜
2022/1/18 亚泰集团 3.2 3.3 中长线 水泥建材,举牌,机构重仓,重要概念,参股银行、券商,3.2元强支撑
2022/1/28 青松建化 3.3 3.6 中线 水泥建材,证金持股,一带一路,化工原料。
2022/1/28 三一重工 19 20.5 中线 工程机械概念,工业互联,军民融合,新能源车,参股银行,军工
2022/2/8 秦川机床 9 9.2 中线 通用设备,工业母机,工业大麻,工业互联,智能机器,3D打印,军工。
2022/2/10 华孚时尚 4.5 4.75 短线 纺织服装,深股通,农业种植,贬值受益,参股银行、创投。
2022/2/15 掌阅科技 18.5 19.2 短线 文化传媒,机构重仓,数字阅读,鸿蒙概念,字节概念,华为概念,手游概念
2022/2/16 美凯龙 8.3 8.55 短线 商业百货,股权激励,AH股
2022/2/16 通策医疗 145 153 中线 辅助生殖,区块链,健康中国,医疗器械概念,婴童概念
2022/2/21 金隅集团 2.85 2.95 中长线 水泥建材,ISCI中国,证金持股,国家重点支持的12家水泥企业
2022/2/22 中泰化学 10 10.4 短线 化学原料,碳交易,消毒剂,降解塑料,石墨烯,煤化工,一带一路
2022/2/22 人民网 13.5 14 中线 文化传媒,人民日报控股,国际互联网最大的综合性网络媒体
2022/2/23 四通股份 6.8 7 中长线 装修建材,集研发、设计、生产、销售一体的新型家居生活陶瓷供应商
2022/2/24 滨化股份 7 7.3 中长线 化学化工原料,氢能源,燃料电池,参股保险、银行,锂电池
2022/2/24 三友化工 8.5 8.8 中长线 化学化工原料,化纤,纯碱,氯碱,有机硅。
2022/2/28 芭田股份 6 6.1 中长线 化肥行业,磷化工,转基因,垃圾分类,乡村振兴,生态农业
2022/3/1 赛摩智能 5.9 6.07 短线 电网设备,华为概念,工业互联,工业4.0,无人机,智能机器,燃料电池
2022/3/2 科伦药业 17 17.5 长线 化学制药,机构重仓,新冠药物,分拆预期
2022/3/3 闰土股份 8.6 8.88 中长线 化学制品,纺织染料,印染助剂。产品市占率全国第二
2022/3/4 怡亚通 5.2 5.35 中线 乡村振兴,新零售,粤港自贸,大数据,物联网
2022/3/7 合力泰 3.5 3.6 中长线 无线充电,新能源车,3D玻璃,智能穿戴
Date Code Name Price1 Price2 中间价 现价 期间最高价 盈亏 盈亏max
0 2022/1/5 000617.SZ 中油资本 5 5.2 5.1 5.25 5.93 2.94% 16.27%
1 2022/1/10 603020.SH 爱普股份 12 13.5 12.75 11.14 15.4 -12.63% 20.78%
2 2022/1/13 002697.SZ 红旗连锁 5.4 5.7 5.55 4.6 5.82 -17.12% 4.86%
3 2022/1/18 600881.SH 亚泰集团 3.2 3.3 3.25 2.94 3.4 -9.54% 4.62%
4 2022/1/28 600425.SH 青松建化 3.3 3.6 3.45 3.98 4.17 15.36% 20.87%
5 2022/1/28 600031.SH 三一重工 19 20.5 19.75 17.66 21.38 -10.58% 8.25%
6 2022/2/8 000837.SZ 秦川机床 9 9.2 9.1 9.38 10.44 3.08% 14.73%
7 2022/2/10 002042.SZ 华孚时尚 4.5 4.75 4.625 4.38 4.79 -5.30% 3.57%
8 2022/2/15 603533.SH 掌阅科技 18.5 19.2 18.85 16.9 19.54 -10.34% 3.66%
9 2022/2/16 601828.SH 美凯龙 8.3 8.55 8.425 8.32 8.77 -1.25% 4.09%
10 2022/2/16 600763.SH 通策医疗 145 153 149 135.46 163.69 -9.09% 9.86%
11 2022/2/21 601992.SH 金隅集团 2.85 2.95 2.9 2.89 3.04 -0.34% 4.83%
12 2022/2/22 002092.SZ 中泰化学 10 10.4 10.2 10.75 11.39 5.39% 11.67%
13 2022/2/22 603000.SH 人民网 13.5 14 13.75 12.61 14.36 -8.29% 4.44%
14 2022/2/23 603838.SH 四通股份 6.8 7 6.9 6.9 7.53 0.00% 9.13%
15 2022/2/24 601678.SH 滨化股份 7 7.3 7.15 6.78 7.48 -5.17% 4.62%
16 2022/2/24 600409.SH 三友化工 8.5 8.8 8.65 9.17 9.7 6.01% 12.14%
17 2022/2/28 002170.SZ 芭田股份 6 6.1 6.05 5.82 6.42 -3.80% 6.12%
18 2022/3/1 300466.SZ 赛摩智能 5.9 6.07 5.985 5.64 6.18 -5.76% 3.26%
19 2022/3/2 002422.SZ 科伦药业 17 17.5 17.25 16.4 18.12 -4.93% 5.04%
20 2022/3/3 002440.SZ 闰土股份 8.6 8.88 8.74 8.3 8.85 -5.03% 1.26%
21 2022/3/4 002183.SZ 怡亚通 5.2 5.35 5.275 5.02 5.36 -4.83% 1.61%
22 2022/3/7 002217.SZ 合力泰 3.5 3.6 3.55 3.46 3.56 -2.54% 0.28%

低估值公司:

公司 特性
新和成 002001 国内化学原料药龙头,主营营养品、香精香料、新材料、原料药,全球维生素龙头
华东医药 000963 主营抗生素、中成药、化学合成药、基因工程药品的生产销售,华东区高度自动化医药物流中心,连续多年行业前十强,医美板块搭建了全产品管线
复星医药 600196 与全球著名医药巨头BionTECH合作新莞疫苗,长期布局全医疗产业链
晨光文具 603899 国民稳居第一品牌,书写工具领域市占率20%
万华化学 600309 MDI领域技术垄断。目前全球仅有5家MDI自主知识产权,中国唯一拥有MDI,连续9年ROE>20%,50万吨MDI新增产能有望被国际市场消化
长江电力 600900 国内水电行业龙头、全球水利发电量最大,碳中和的背景下,成为清洁能源的排头兵
海康威视 002415 全球安防系统龙头,20年后EBG领域高增长,AI技术融合,叠加智慧城市的利好,行业景气回升

优质赛道公司:

行业 公司 特性
储能 盛洪股份 储能设备业务迅速增长,占据三个碳中和重要赛道
百川股份 今年业绩出现拐点,未来业绩高速增长,知名游资和机构齐聚
上能电气 光伏储能战略加速增长
科华数据 机构资金进入,前期涨幅较小
科士达 储能业务有望高速增长
新能源汽车 宁德时代 全球动力锂电池龙头,市占率第一,储能行业龙头
比亚迪 全产业链布局,拥有新能源汽车、储能、光伏、半导体四大景气赛道
恩杰股份 全球隔膜龙头,动力电池隔膜市占率50%
天赐材料 国内电解液龙头,业绩高速增长具有确定性
光伏 迈为股份 太阳能电池丝网印刷设备龙头,布局了HJT全新赛道,成为HJT整线设备供应商
隆基股份 全球光伏一体化龙头,单晶硅领域形成高的技术壁垒,全球光伏装机量第一,市占率18%
通威股份 国内光伏、多晶硅、电池环节龙头,光伏产业链硅料、电池片两个环节有低成本竞争优势,这两个细分行业集中度低发展空间大
阳光电源 全球逆变器龙头,逆变器技术领先,有核心竞争力,储能也将成为公司新的增长点
福斯特 光伏胶膜龙头,全球市占率>50%,拥有一定的定价权,自主研发的光伏胶膜打破国外技术垄断
福莱特 光伏玻璃龙头,屋顶分布式光伏试点将加快双玻组件的应用

国产芯片公司

NO. 类型 公司 特性
上游 芯片设计 韦尔股份 泛模拟芯片龙头,电源管理IC、分立器龙头,光学传感器龙头
汇顶科技 指纹识别芯片龙头
澜起科技 内准接口芯片龙头
兆易创新 存储器、MCU芯片龙头
卓胜微 射频芯片龙头
紫光国微 FPGA龙头、智能安全芯片
圣邦股份 国产模拟芯片龙头
北京君正 存储芯片龙头,CPU设计
乐鑫科技 物联网WiFi、MCU SOC通信芯片及模组龙头
博通继承 无线射频芯片设计领域的佼佼者,全球首颗ETC芯片缔造者
全志科技 唯一独立自处IP核的芯片设计公司
上海贝岭 计量芯片,国网、南网统招市场计量芯片供应商之一
国科微 广播电视芯片
富瀚微 视频监控芯片
中颖电子 家电主控单芯片MCU领域龙头
景嘉微 GPU标的,军用领域占主导地位
富满电子 电源管理IC龙头
晶丰明源 模拟和混合信号集成电路设计
华胜天成 拥有泰凌葳电子82%股权,物联网无线连接芯片
纳思达 国产打印机芯片
半导体设备 中微公司 等离子刻蚀
北方华创 半导体设备龙头
芯源微 涂胶显影设备厂,中科院背景
长川科技 国产半导体测试设备
至纯科技 高纯工艺系统领域龙头
晶盛电机 单晶硅设备龙头
万业企业 离子注入机
半导体材料 江化微 湿电子化学品龙头
中环股份 硅片龙头,国内唯一具备直拉法和熔法半导体制备技术的硅片制造商
阿石创 国内读膜镀料稀缺标的
上海新阳 国内晶圆、化学品龙头
江丰公司 高频溅射靶材龙头
鼎龙股份 国内CMP抛光垫龙头
晶瑞股份 电子水、安睡符合SEIMG5标准,满足14纳米制程工艺
中游 晶圆制造 士兰微 功率半导体龙头
中芯国际 国内技术最先进、规模最大,专业晶圆代工,市占率全球第四
三安光电 LED芯片龙头、MOCVD产能规模国内首位
扬杰科技 功率二极管国内龙头
闻泰科技 并购安世半导体后成为行业龙头安世半导体二极管和晶体管排名第一安世半导体二极管和晶体管排名第一逻辑部件排名第二ESD保护器排名第二小信号MOSFET排名第二汽车功率MOSFET排名第二
捷捷微电 国内晶闸管龙头
露笑科技 第三代半导体碳化硅行业投资规模龙头
下游 封装测试 长电科技 世界前十大封测企业,国内龙头
华天科技 世界前十大封测企业,国内老二
通富微电 国内老三
晶方科技 细分封测龙头,摄像头芯片封测龙头
深科技 细分封测龙头,国内内存芯片封测龙头

股票基础知识

市盈率 PE(倍数)

定义:

市价盈利比率: 公司市值/净利润 P/E 。(回本年限,市场热度)【DYNAINFO(39)】

分类:

  • PE:静态 ,上年度的 年报净利润

  • PE-E:动态,上季度的 净利润*4

  • PE-TTM:滚动,往前12个月 的净利润总和

应用:

  • 同行业对比

  • 历史值对比

  • 合理估值,分位点 >50%即高估 <50%即低估 分位点:26%表示当前PE比过去74%的时候低

PEG 市盈率/盈利增速

  • PEG=1,估值合理 净利润增长率很难长期超过30%

  • 估值低

    • PE低

    • 盈利增长率高

    • 适用处于上升阶段 同时参考:PE,PB)

市净率 PB

  • 股价/净资产 P/B 【C/FINANCE(34)】

  • 反应公司经营状况的好坏 尤其适用靠净资产增值盈利的公司: 银行和金融机构

  • PB值越小,安全边际高

  • 没有关联盈利和盈利增速 适用盈利不稳定的周期股

  • 计算要剔除商誉 股价/(净资产-商誉)

  • PB>8时,风险较大

  • 尤其适用靠净资产增值盈利的公司:

    • 银行和金融机构,PB值越小,安全边际高, 没有关联盈利和盈利增速
    • 适用盈利不稳定的周期股,计算要剔除商誉

市销率 PS

  • P/S S:每股收入或 总市值/销售收入 TOTALCAPITALC100/FINANCE(20)

  • 不受折旧、存货、非经常性收支影响 不像利润那一容易被操控

  • 收入不会出现负值 及时利润为负

  • 销售收入增大而下降 营业收入规模大的公司PS低

  • 不体现成本控制能力, 不关联利润

  • 体现公司的潜在价值 市销率越低,说明该公司股票目前的投资价值越大

    • 不受折旧、存货、非经常性收支影响
    • 不像利润那一容易被操控,收入不会出现负值。即使利润为负, 销售收入增大而下降
    • 营业收入规模大的公司PS低,不体现成本控制能力,不关联利润

    EPS 每股收益 ( 税后)

  • EPS=本期税后净利/ 普通股在外流通股数

  • EPS高代表 公司某种能力强 衡量盈利能力最重要的财务指标 反映普通股的获利水平 【FINANCE(30) / (CAPITAL*100)】

  • 产品行销能力

  • 技术能力

  • 管理能力

  • 用途

    • 比较不同公司EPS高低没有意义, 要同时考虑股价和市盈率才有意义

    • 关注公同一司过去EPS趋势, 以及未来成长性也要列入评估

    • EPS要稳定,小心EPS忽高忽低的股票

    • 获利不稳的公司,要观察稀释EPS 股数必须把一些认股权证、可转换债券等, 可能会变成「新股」的股份也都算进来,

    • 小心获利和现金流的落差

    • 常增资的公司,要注意流通在外股数的加权计算问题

净资产收益率 ROE

  • FINONE(281,0,0):当前值
  • FINONE(281,YEAR-1,1231):去年年报值
  • 计算公式:ROE=净利润 / 净资产 = 净利润 / 销售收入 X 销售收入 / 总资产 X 总资产 / 净资产

!

  • 净利润/销售收入=净利率

    • 高净利率代表有很强的定价权
  • 销售收入/总资产=周转率

    • 高周转率:加速资金流动,提高资金利用率
  • 总资产/净资产=杠杆率

    • 通过高杠杆,提高利润
    • 高杠杆同时高负债,高风险
  • 应用:

    • 10年年均ROE
      • 年均ROE过低,公司就不适合长期投资,说明公司所在的行业一片红海,长期收益也低;
      • 年均ROE过高,也有问题,就是一块肥肉,就会吸引狼群,没有很高的护城河,很快就会有大量公司涌入ROE很难保持在过高的位置,反而容易落入低ROE情况
      • 10-15%:一般
      • 15-20%:杰出
      • 20%:优秀
  • ROE过去十年均值小于15%的公司,胜率低。 巴菲特曾说过,对于长期投资公司,你的年化收益通常就等于公司的年均ROE。这句话有3层意思: 2、年均ROE≥15%,年化收益也在15%附近,说明公司价格合理,也很适合长期投资; 3、年均ROE≥15%,年化收益也远大于15%,说明公司是好公司,但短期价格高估了;三是年均ROE≥15%,年化收益也远小于15%,说明短期价格低估了,这时就要看看短估的原因,若是因为行业衰退了,则要远离,若仅是市场情绪影响,则是投资的好机会。

股息率

  • 函数:FINANCE(45)

利润同比

  • 函数: FINANCE(43)

  •  净利润        FINANCE(30)
    
  • 扣非净利润 FINVALUE(206)

收入同比

  • 函数:FINANCE(44)

存货

  • 函数: FINANCE(27)

权益比

  • 函数:FINANCE(36)

  • 股东权益(净资产)/资产总额*100

  • 股东权益比率与资产负债率之和等于1。

资产负债率

  • 函数:FINANCE(9)

销售利润率

  • 毛利率 FINVALUE(202)

  • 净利率 FIVALUE(199)

流动比率

  • FINANCE(11)/FINANCE(15)*100

  • 流动比率=流动资产/流动负债 参考>1.5

速动比率

  • 速动比率=速动资产÷流动负债 (FINANCE(11)-FINANCE(27))/FINANCE(15)

  • 速动资产=流动资产-存货 FINANCE(11)-FINANCE(27)

字典 dict

dict 字典是一些 ‘键:值’ 对的集合。

  • 用键来索引

  • 字典是可变对象,值的类型不限,键类型是不可变类型

    键类型不能是列表、元组、集合、字典

创建字典

关键字创建字典

1
dict(a=3, b=33)
1
{'a': 3, 'b': 33}

zip()函数生成关键字参数创建

1
dict(zip(['a', 'b'], [3, 4]))
1
{'a': 3, 'b': 4}

fromkeys()函数创建

1
dict.fromkeys(['a', 'b'], [3, 4])
1
{'a': [3, 4], 'b': [3, 4]}
1
dict.fromkeys(['a', 'b'], 11)
1
{'a': 11, 'b': 11}
1
dict.fromkeys('a', [3, 4])
1
{'a': [3, 4]}

解析式创建字典

1
{k: v for k, v in [('a', 1), ('b', 2), ('c',3)]}
1
{'a': 1, 'b': 2, 'c': 3}
1
{k:v for k,v in zip(['a','b','c'],[1,2,3])}
1
{'a': 1, 'b': 2, 'c': 3}

索引

d[key] 字典索引返回对应的值

  • 如果key不存在则抛出KeyError异常
1
2
dt1 = dict(zip(['a', 'b', 'c'], [11, 22, 33]))
dt1
1
{'a': 11, 'b': 22, 'c': 33}
1
dt1['b']
1
22

键测试

  • key in d。测试指定键是否存在字典中
1
2
'c' in dt1
's' in dt1
1
2
True
False

字典的迭代:

d.keys()

  • 返回一个dict_keys对象,它是一个可迭代对象,迭代时返回键序列
1
2
3
4
5
# 返回迭代器
dt1.keys()

# 将迭代器转成列表
list(dt1.keys())
1
2
dict_keys(['a', 'b', 'c'])
['a', 'b', 'c']

d.values():

  • 返回一个dict_values对象,它是一个可迭代对象,迭代时返回值序列
1
2
3
dt1.values()

list(dt1.values())
1
2
dict_values([11, 22, 33])
[11, 22, 33]

d.items():

  • 返回一个dict_items对象,它是一个可迭代对象, 迭代时返回元组(键,值)的序列
1
2
3
4
5
dt1.items()

list(dt1.items())

[list(x) for x in list(dt1.items())]
1
2
3
dict_items([('a', 11), ('b', 22), ('c', 33)])
[('a', 11), ('b', 22), ('c', 33)]
[['a', 11], ['b', 22], ['c', 33]]

字典的操作

获取字典的内容

1
2
3
4
[x for x in dt1]
[x for x in dt1.keys()]
[x for x in dt1.values()]
[x for x in dt1.items()]
1
2
3
4
['a', 'b', 'c']
['a', 'b', 'c']
[11, 22, 33]
[('a', 11), ('b', 22), ('c', 33)]

字典的增删改

1
2
3
4
5
d1= dict(zip(['a', 'b', 'c'], [11, 22, 33]))
d1

d1['f']=100
d1
1
2
{'a': 11, 'b': 22, 'c': 33}
{'a': 11, 'b': 22, 'c': 33, 'f': 100}
1
2
3
d1= dict(zip(['a', 'b', 'c'], [11, 22, 33]))
d1.pop('a')
d1
1
2
11
{'b': 22, 'c': 33}
1
2
3
d1= dict(zip(['a', 'b', 'c'], [11, 22, 33]))
del d1['a']
d1
1
{'b': 22, 'c': 33}
1
2
3
4
5
d1= dict(zip(['a', 'b', 'c'], [11, 22, 33]))
d1

d1['a']=[12,34,5]
d1
1
2
{'a': 11, 'b': 22, 'c': 33}
{'a': [12, 34, 5], 'b': 22, 'c': 33}
1
len(d1)
1
3

合并字典

1
2
3
4
d1= dict(zip(['a', 'b', 'c'], [11, 22, 33]))
d2= dict(zip(['d', 'e', 'f'], [1, 2, 3]))
d1.update(d2)
d1
1
{'a': 11, 'b': 22, 'c': 33, 'd': 1, 'e': 2, 'f': 3}
1
2
3
4
d1= dict(zip(['a', 'b', 'c'], [11, 22, 33]))
d2= dict(zip(['c', 'd', 'e'], [1, 2, 3]))
d1.update(d2)
d1
1
{'a': 11, 'b': 22, 'c': 1, 'd': 2, 'e': 3}

认识 list

  • list 是一个序列
  • 存在于中括号内
  • list 中元素的类型可以多样,同一个 list 中的元素的类型可以是字符串(str)、整型(int)、布尔型(Boolean)、以及嵌套的 list 等
1
2
3
4
5
6
list1 = ['东北', '华北', '华南', '华东', '西南', '西北']  # 字符串用引号包含起来
list2 = [] # 空列表

type(list1)
list1
list2
1
2
3
list
['东北', '华北', '华南', '华东', '西南', '西北']
[]
1
2
3
4
list3 = list('ABCDEF')  # 字符串列表
list4 = list(range(10)) # 整型列表
list3
list4
1
2
['A', 'B', 'C', 'D', 'E', 'F']
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list 的索引

下标索引

  • 注意索引是从 0 开始,最后一个的索引编号为 n-1,即所有元素的编号依次为(0,1, 2, …, n-1)。
1
2
3
4
list3[0]
list3[2]
list3[-1]
list3[-2]
1
2
3
4
'A'
'C'
'F'
'E'

切片

  • list[start: end : step]
  • 包含 “start”,但不包含 “end”
  • “step” 表示步长,默认情况下,“step”为 1
1
2
3
4
5
list3[1:4]
list3[:4]
list3[4:]
list3[::-1]
list3[::2]
1
2
3
4
5
['B', 'C', 'D']
['A', 'B', 'C', 'D']
['E', 'F']
['F', 'E', 'D', 'C', 'B', 'A']
['A', 'C', 'E']

用for 循环遍历列表

1
2
for i in list1:
print(i)
1
2
3
4
5
6
东北
华北
华南
华东
西南
西北

列表的增、改、删

  • list 是一个可变的序列,可以通过添加、修改、删除等操作来操作 list 中的元素。

append() 方法

  • 是在 list 的末尾添加元素
1
2
3
4
a = ['北京', '上海', '天津', '重庆']

a.append('深圳') # 在列表的末尾增加新值
a
    ['北京', '上海', '天津', '重庆', '深圳']

insert()

  • 是在指定位置添加元素。
1
2
a.insert(1, '广州')  # 表示在索引1的位置插入新值
a
    ['北京', '广州', '上海', '天津', '重庆', '深圳']

用 pop()

  • 方法删除 list 末尾的元素
1
2
a.pop()
a
1
2
'深圳'
['北京', '广州', '上海', '天津', '重庆']

用 pop(i) 方法

  • 删除指定位置的元素
1
2
a.pop(0)
a
1
2
'北京'
['广州', '上海', '天津', '重庆']

修改 list 中的元素

  • 直接通过 list 的索引进行赋值来实现
1
2
a[0] = "北京"
a
1
['北京', '上海', '天津', '重庆']		

列表操作符

‘ + ’ 拼接列表

1
2
3
4
es = ['黑龙江', '吉林', '辽宁']
ws = ['新疆', '青海', '甘肃', '宁夏', '陕西']

es+ws
1
['黑龙江', '吉林', '辽宁', '新疆', '青海', '甘肃', '宁夏', '陕西']

‘ * ‘ 重复列表

1
es*2
1
['黑龙江', '吉林', '辽宁', '黑龙江', '吉林', '辽宁']

判断元素是否存在

1
2
'黑龙江' in es
'黑龙江' in ws
1
2
True
False

列表函数

len( )

1
2
3
a = list(range(11, 29, 4))

len(a)
1
5

- max(list)

  • 返回列表元素最大值
1
max(a)
1
27

min(list)

  • 返回列表元素最小值
1
min(a)
1
11

list()

  • 将其他序列转成列表
1
2
b = (1, 3, 5, 7)
list(b)
1
[1, 3, 5, 7]

list的其他方法

list.count(obj)

  • 统计某个元素在列表中出现的次数
1
2
3
a = list('guangzhou')
a.count('g')

1
2

list.extend(seq)

  • 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
1
2
3
a = list('guangzhou')
a.extend(['sh',12345])
a
1
['g', 'u', 'a', 'n', 'g', 'z', 'h', 'o', 'u', 'sh', 12345]

list.index(obj)

  • 从列表中找出某个值第一个匹配项的索引位置
1
2
a = list('guangzhou')
a.index('z')
1
5

list.remove(obj)

  • 移除列表中某个值的第一个匹配项
1
2
3
a = list('guangzhou')
a.remove('g')
a
    ['u', 'a', 'n', 'g', 'z', 'h', 'o', 'u']

list.sort()

  • 对原列表进行排序
1
2
3
4
a = list('guangzhou')
a.sort()

a
1
['a', 'g', 'g', 'h', 'n', 'o', 'u', 'u', 'z']

list.reverse()

  • 对原列表进行反向排序
1
2
3
a = list('guangzhou')
a.reverse()
a
1
['u', 'o', 'h', 'z', 'g', 'n', 'a', 'u', 'g']

列表推导式 (解析式)

一般语法结构:

  • new_list = [x for x in iterable]
  • 其中的 iterable 表示可迭代的对象,包括字符串(str)、列表(list),元组(tuple)、字典(dict)、集合(set)以及生成器(generator)等。
1
[x for x in range(1, 10, 2)]
1
[1, 3, 5, 7, 9]
1
2
# str.lower()转换成小写,str.upper()转换成大写
[x.upper() for x in "Lemon"]
1
['L', 'E', 'M', 'O', 'N']
1
[str(x) for x in range(5)]
1
['0', '1', '2', '3', '4']

两层 for 循环的列表推导式

  • 列表推导式中,可以同时包含多个 for 循环,比如同时两个 for 循环
1
[x**2+y for x in range(1, 4) for y in [10, 20]]
1
[11, 21, 14, 24, 19, 29]

使用两个变量来生成 list

  • 列表推导式也可以使用两个或多个变量来生成 list,结合字典的使用
1
2
3
# 结合字典的使用
g = {'x': '1', 'y': '2', 'z': '4'}
[k+'='+v for k, v in g.items()]
1
['x=1', 'y=2', 'z=4']

含 if 语句的列表推导式

  • 列表推导式中还可以引入 if 条件语句,
  • 包含 if-else 语句的列表推导式
1
2
# 列表推导式中还可以引入 if 条件语句
[x**2 for x in range(5) if x % 2 == 1]
1
[1, 9]
1
2
3
# 包含 if-else 语句的列表推导式
[x**2 if x % 2 == 0 else x+2 for x in range(5)]

1
[0, 3, 4, 5, 16]
1
2
# 包含两个 if 语句的列表推导式
[x**2 for x in range(1, 9) if x % 2 == 0 if x % 3 == 0]
1
[36]

列表的去重

  1. 直接用set方法可以去重,但是原列表中元素的顺序被打乱
  2. 利用原来各元素在列表中的索引位可以保持原来的顺序
1
2
a = [1, 5, 3, 7, 5, 3, 1, 9]
list(set(a))
1
[1, 3, 5, 7, 9]

列表推导

1
2
3
4
5
6
# 方法1 
b = []
for x in a:
if x not in b:
b.append(x)
b
1
[1, 5, 3, 7, 9]

sorted

  • sorted(list(set(list1),key=list1.index)
1
2
# 方法2
sorted(list(set(a)), key=a.index)
1
[1, 5, 3, 7, 9]

{}.fromkeys(seq)

1
2
# 方法3 
list({}.fromkeys(a))
1
[1, 5, 3, 7, 9]

获取列表离散的元素

  • 获得第 1、2、4 个元素,能不能通过离散的索引值来获取呢?
    前面已经实践过,直接通过离散的索引值来获取列表中的元素是不行的。
    通过列表推导式的学习,我们可以换一种思路,来实现列表中离散的元素的获取,
1
2
ws=['新疆', '青海', '甘肃', '宁夏', '陕西']
[ws[x] for x in [0, 2, 4]]
1
['新疆', '甘肃', '陕西']
1
2
lst=list("ABCDEFG")
lst[1:4],lst[:4],lst[2:]
1
(['B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['C', 'D', 'E', 'F', 'G'])
1
2
lst=list("ABCDE")
[lst[i] for i in [0,3,4] ]
1
['A', 'D', 'E']
1
2
3
4
lst=list("ABCDEFG")
lst.extend(["gg","dd"])
lst[len(lst):]=['dddd','ppp']
lst
    ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'gg', 'dd', 'dddd', 'ppp']

Numpy

  • 功能强大的N维数组对象。
  • 精密广播功能函数。
  • 集成 C/C+和Fortran 代码的工具。
  • 强大的线性代数、傅立叶变换和随机数功能。
  • NumPy提供了一个N维数组类型,即ndarray, 它描述了相同类型的“项目”集合。可以使用例如N个整数来索引项目。
  • 所有ndarray都是同质的:每个项目占用相同大小的内存块, 并且所有块都以完全相同的方式解释。
  • 如何解释数组中的每个项目由单独的数据类型对象指定, 其中一个对象与每个数组相关联。除了基本类型(整数,浮点数 等 )之外, 数据类型对象还可以表示数据结构。

导入Numpy模块

1
2
3
import numpy as np
# 或
from numpy import *

初识数组(Arrays)

  • numpy数组是一个值网格,所有类型都相同,并由非负整数元组索引。
  • 维数是数组的排名; 数组的形状是一个整数元组,给出了每个维度的数组大小。
1
2
3
4
5
6
# 用一个一维列表传入
ar1 = np.array([1, 3, 5, 7])
ar1

# 数组转成列表
ar1.tolist()
1
2
array([1, 3, 5, 7])
[1, 3, 5, 7]
1
2
3
# 查看类型

type(ar1)
1
numpy.ndarray
1
2
3
# 查看维度  返回的格式(n,m),其中n为行数,m为列数

ar1.shape
1
(4,)
1
2
3
# 查看数组的维度数

ar1.ndim
1
1
1
ar1.size
1
4
1
2
3
# 索引

ar1[0],ar1[2]
1
(1, 5)
1
2
3
4
# 修改值

ar1[2]=9
ar1
1
array([1, 3, 9, 7])

创建数组

创建一维数组

  1. 用np.array(list) 传入列表
  2. 用np.arange() 传入数值范围
1
2
3
4
5
# 直接用列表传入
np.array([x for x in range(1,20,4)])

lst1=['a',"b","c"]
np.array(lst1)
1
2
array([ 1,  5,  9, 13, 17])
array(['a', 'b', 'c'], dtype='<U1')
1
2
3
# 用 arange() 传入一个范围,arange的用法和range一样

np.arange(1, 10, 3)
1
array([1, 4, 7])

创建二维数组

  1. 用np.array([list1,list2]) 传入一个二维列表,且长度一致
  2. 用np.arange() .reshape(()) 传入数值范围,用reshpe函数重构,reshape函数内是一个元组格式,元素相乘的结果要等于范围内的个数
  3. reshape()函数重构时,必须保证各维度数值相乘的结果等于数组中元素的个数
1
2
3
4
# 直接传入一个二维列表

c = np.array([[1, 2, 3], [4, 5, 6]])
type(c), c.shape, c
1
2
3
4
(numpy.ndarray,
(2, 3),
array([[1, 2, 3],
[4, 5, 6]]))
1
2
3
4
# 用arange传入数据范围后用reshape()重构,指定成?行?列

d = np.arange(1, 7).reshape((2, 3))
d
1
2
array([[1, 2, 3],
[4, 5, 6]])

创建多维数组

  1. 一般用reshape函数比较简单,因为中括号的嵌套比较复杂。
  2. shape属性可以查看数组的维度。如:e.shape
  3. 多维数组如何看待?
    1. 维度显示是一个元组形式
    2. 末尾的两位可以简单看成是行数和列数
    3. 再往前则可以理解成小区块,大区快
    4. 如果shape的结果是(2,3,4) 表示有2个区块,每个区块中有3行4列的数据
    5. 如果结果是(2,2,2,3) 表示有2个大区块,每个大区块中有2个小区块,每个小区块中有2行3列数据
1
2
3
4
5
6
7
8
# 创建一个3维数组
# 数组维度是用元组的方式表示的。元组内最后两个数分别表示行和列。再往前就是表示块
# 下面的表示就是:2块,3行4列的数组

e = np.arange(24).reshape(2, 3, 4)

e.shape
e
1
2
3
4
5
6
7
8
9
(2, 3, 4)

array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],

[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
1
2
3
4
5
6
# 多维数组
# 从维度元组中可以得知:最小单位是2行3列的数组,有2个大块,每个大块中包含2个小块,每个小块中有1个2行3列的数组。

f = np.arange(24).reshape(2, 2, 2, 3)

f.shape, f
1
2
3
4
5
6
7
8
9
10
11
12
((2, 2, 2, 3),
array([[[[ 0, 1, 2],
[ 3, 4, 5]],

[[ 6, 7, 8],
[ 9, 10, 11]]],

[[[12, 13, 14],
[15, 16, 17]],

[[18, 19, 20],
[21, 22, 23]]]]))

数组的转换

  • reshape()函数和flatten()函数
  1. 有重构函数reshpe()可以改变数组的维度,只要保证元组元素乘积等于数组数据的个数
  2. 多维数组就可以转换成1维数组
    1. reshape((num1,)) num1=数据个数
    2. flatten()展开数组变成一维数组
1
2
a = np.arange(12).reshape(3, 4)
a
1
2
3
array([[ 0,  1,  2,  3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
1
2
3
4
5
6
7
# 转换成一维数组

a.reshape(12,) # 参数内只写一个数,且数字为数组的大小

a.flatten() # flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组,默认按行降维.参数"A"省略

a.flatten("F") # 加入参数“F"变为按列降维
1
2
3
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
1
2
3
4
5
# 变成其他维度(形状),用reshape()并指定行列数

a.reshape(2,6)

a.reshape(4,-1) # 参数中的”-1“ 代表自动计算。(据已知条件自动计算)
1
2
3
4
5
6
7
array([[ 0,  1,  2,  3,  4,  5],
[ 6, 7, 8, 9, 10, 11]])

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

创建等值的矩阵

  1. np.zeros代表全是0
  2. np.ones代表全是1
1
np.zeros(5, dtype=np.int32)  
1
array([0, 0, 0, 0, 0])
1
np.zeros((2, 5), dtype=np.int32)  
1
2
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
1
np.ones(5, dtype=np.float16)
1
array([1., 1., 1., 1., 1.], dtype=float16)
1
2
3
4
5
6
7
8
9
10
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
36
37
import pandas as pd
import numpy as np

# 创建一维数组
a = np.array([1, 2, 3, 4]) # 数组a: [1 2 3 4]
b = np.arange(1, 5) # 数组b: [1 2 3 4]
type(a) # a类型是:<class 'numpy.ndarray'>

# 创建二维数组
c = np.array([[1, 2, 3], [4, 5, 6]])
d = np.arange(1, 7).reshape((2, 3))

# 创建三维数组或更高维度的数组
e = np.arange(24).reshape(2, 3, 4)
f = np.arange(24).reshape(2, 2, 2, 3)
f.shape # 返回值为: (2,2,2,3)
print('''
数组e:{}

数组f:{}'''.format(e, f))

# 数组的维度转换
g = a.reshape(2, 2) # 转成2行12列的二维数组
h = g.reshape(-1, 2) # reshape函数中元组中出现“-1”,则表示根据已知条件自动计算出
i = g.reshape(4,) # 传递给reshape函数的元组中只有1个数表示转化成1维数组,注意有逗号,逗号后为空
j = g.flatten() # 与上面的结果相同. array([1, 2, 3, 4])

# 创建特殊数组
np.zeros(5, dtype=np.int32) # array([0, 0, 0, 0, 0])
np.ones(5, dtype=np.float16) # array([1., 1., 1., 1., 1.], dtype=float16)
np.zeros((2, 5), dtype=np.int32) # 生成2行5列的二维数组,值都为0,数据类型为int32

# 查看数组属性
f.ndim # 返回值:4 表示4维数组
f.shape # 返回值: (2, 2, 2, 3)
f.size # 返回值: 24
x = c.reshape(c.size,) # 数组x: array([1, 2, 3, 4, 5, 6])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
numpy.ndarray
(2, 2, 2, 3)
数组e:[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]

数组f:[[[[ 0 1 2]
[ 3 4 5]]

[[ 6 7 8]
[ 9 10 11]]]

[[[12 13 14]
[15 16 17]]

[[18 19 20]
[21 22 23]]]]
array([0, 0, 0, 0, 0])

array([1., 1., 1., 1., 1.], dtype=float16)

array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])

4

(2, 2, 2, 3)
24

创建等分数组

1
2
3
# 将1-5分段,有两个端点

np.linspace(1, 5, 2, dtype=np.float32)
1
array([1., 5.], dtype=float32)
1
2
# 将1-5分段,有3个端点
np.linspace(1, 5, 3)
1
array([1., 3., 5.])
1
2
# 将1-5分段,有36个端点
np.linspace(1, 5, 6)
1
array([1. , 1.8, 2.6, 3.4, 4.2, 5. ])

高斯分布(正态分布)

1
2
np.random.randn(2,5)  # 生成对应形状(shape)的高斯分布
np.random.normal(3, 1, 12) # 生成均值为loc,标准差为scale,形状(shape)为size的高斯分布
1
2
3
4
5
6
array([[-0.62751446,  2.29446202, -0.53109692, -0.07013024,  0.28581247],
[-1.02490725, -0.18025872, -1.00725205, -0.0991576 , -0.68541257]])

array([3.04006092, 2.57668325, 4.54845812, 4.48776295, 3.01108357,
5.68784587, 2.80187253, 3.85604824, 4.36074347, 3.00090056,
1.55342793, 4.60112417])

均匀分布

1
2
np.random.rand(2, 3)  # 生成对应形状(shape)的均匀分布
np.random.uniform(11, 19, 6) # 生成一个从[low, high)中随机采样的,样本数量为size的均匀分布
1
2
3
4
5
array([[0.24771356, 0.63015361, 0.46175306],
[0.39705638, 0.13455475, 0.01309569]])

array([18.47429041, 17.74433573, 15.09945145, 18.10811743, 13.92652713,
18.28708122])

数组索引

  • Numpy提供了几种索引数组的方法。

切片(Slicing)

  • 与Python列表类似,可以对numpy数组进行切片。由于数组可能是多维的,因此必须为数组的每个维指定一个切片:
1
2
3
4
5
6
7
8
9
# 切片
a = np.arange(12).reshape(3, 4)

a[:, 1:3] # 所有行的0列
a[:, 0: 2] # 所有行的0,2列
a[1:2, :] # 1行的所有列

b = a[:2, 1:3]
b
1
2
3
4
5
6
7
8
9
10
11
12
array([[ 1,  2],
[ 5, 6],
[ 9, 10]])

array([[0, 1],
[4, 5],
[8, 9]])

array([[4, 5, 6, 7]])

array([[1, 2],
[5, 6]])

整数与切片混合索引

  • 这样做会产生比原始数组更低级别的数组。
1
2
3
4
a = np.arange(12).reshape(2, 2, 3)
a

a[:,0,:]# 全部块的0行全部列
1
2
3
4
5
6
7
8
array([[[ 0,  1,  2],
[ 3, 4, 5]],

[[ 6, 7, 8],
[ 9, 10, 11]]])

array([[0, 1, 2],
[6, 7, 8]])
1
2
3
4
5
6
7
8
# 整数索引与切片索引混合使用

a = np.arange(12).reshape(4, 3)

a
a[1,0:2]
a[1,[0,2]]
a[[1,2],[0,2]]
1
2
3
4
5
6
7
8
9
10
array([[ 0,  1,  2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])

array([3, 4])

array([3, 5])

array([3, 8])

整数数组索引

  • 使用切片索引到numpy数组时,生成的数组视图将始终是原始数组的子数组。
  • 相反,整数数组索引允许你使用另一个数组中的数据构造任意数组
1
2
3
4
5
6
7
8
9
10
11
12
13
# 整数组索引

a = np.arange(12).reshape(4, 3)
a[[0, 1, 2], [0, 1, 0]]

# 整数组索引的技巧
b = np.array([0, 2, 0, 1])
a[np.arange(4), b]

# 将索引的每个位置的数值加上10

a[np.arange(4), b] += 10
a
1
2
3
4
5
6
7
8
array([0, 4, 6])

array([ 0, 5, 6, 10])

array([[10, 1, 2],
[ 3, 4, 15],
[16, 7, 8],
[ 9, 20, 11]])

布尔组索引

1
2
3
4
5
6
7
a = np.arange(12).reshape(4, 3)
print(a)

b = a > 5
a[b]

a[a < 4]
1
2
3
4
5
6
7
8
[[ 0  1  2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]

array([ 6, 7, 8, 9, 10, 11])

array([0, 1, 2, 3])

Numpy的数据类型

  1. 用dtype属性查看数组的数据类型 如:a.dtype
  2. 用astype()函数指定或改变数组的数据类型
  3. 数据类型
    字符 对应类型
    b 布尔型
    i (有符号) 整型
    u 无符号整型 integer
    f 浮点型
    c 复数浮点型
    m timedelta(时间间隔)
    M datetime(日期时间)
    O (Python) 对象
    S, a (byte-)字符串
    U Unicode
    V 原始数据 (void)
  4. 数值类型
    Numpy 的类型 C 的类型 描述
    np.int8 int8_t 字节(-128到127)
    np.int16 int16_t 整数(-32768至32767)
    np.int32 int32_t 整数(-2147483648至2147483647)
    np.int64 int64_t 整数(-9223372036854775808至9223372036854775807)
    np.uint8 uint8_t 无符号整数(0到255)
    np.uint16 uint16_t 无符号整数(0到65535)
    np.uint32 uint32_t 无符号整数(0到4294967295)
    np.uint64 uint64_t 无符号整数(0到18446744073709551615)
    np.intp intptr_t 用于索引的整数,通常与索引相同 ssize_t
    np.uintp uintptr_t 整数大到足以容纳指针
    np.float32 float
    np.float64 / np.float_ double 请注意,这与内置python float的精度相匹配。
    np.complex64 float complex 复数,由两个32位浮点数(实数和虚数组件)表示
    np.complex128 / np.complex_ double complex 请注意,这与内置python 复合体的精度相匹配。

数组运算

  1. 数组的广播机制,对数组内的每个数据分别进行运算

  2. 维度方向运算

    1. axis=0,对各列
    2. axis=1,对各行
  3. 两个维度不同的数组不能算数运算

  4. 两个行列数都不同的数组不能运算

  5. 两个维度相同,行数或列数有其一相同,不同的为1的数组可以运算

    1. 如a:(3,4) b:(3,4)可以运算
    2. 如a:(3,4) b:(4,3)不可以运算
    3. 如a:(3,4) b:(1,4) 行数为1,列数相同,可以运算
    4. 如a:(3,4) b:(3,1) 行数相同,列数为1,可以运算

运算函数

1
2
3
4
# 对整个进行某种运算,如求和,求最大,最小,平均等等
a = np.arange(1, 13).reshape(3, 4)

a.sum(), a.max(), a.min(), a.mean()
1
(78, 12, 1, 6.5)
1
2
3
4
5
6
7
# 累加

np.cumsum(a)

# 累差

np.diff(a)
1
2
3
4
5
array([ 1,  3,  6, 10, 15, 21, 28, 36, 45, 55, 66, 78])

array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
1
2
3
# 中间值

np.median(a)
1
6.5
1
2
3
4
5
# 对每个数据求sin值
np.sin(a)

# 对每个数平方
a**2
1
2
3
4
5
6
7
array([[ 0.84147098,  0.90929743,  0.14112001, -0.7568025 ],
[-0.95892427, -0.2794155 , 0.6569866 , 0.98935825],
[ 0.41211849, -0.54402111, -0.99999021, -0.53657292]])

array([[ 1, 4, 9, 16],
[ 25, 36, 49, 64],
[ 81, 100, 121, 144]])

按维度方向计算

  • a.sum(axis=1) 计算各列
  • a.max(axis=0) 计算各行
1
2
3
4
5
a = np.arange(1, 13).reshape(3, 4)
print(a)

a.sum(axis=1)
a.max(axis=0)
1
2
3
4
5
6
7
[[ 1  2  3  4]
[ 5 6 7 8]
[ 9 10 11 12]]

array([10, 26, 42])

array([ 9, 10, 11, 12])

数组与数组进行运算

1
2
3
4
# 同维度的数组各自对应位置进行运算
a = np.arange(1, 13).reshape(3, 4)
b = np.arange(100, 112).reshape((3, 4))
a+b
1
2
3
array([[101, 103, 105, 107],
[109, 111, 113, 115],
[117, 119, 121, 123]])
1
2
3
4
5
# 与1行同列数的数组运算

a = np.arange(1, 13).reshape(3, 4)
c = np.arange(100, 104).reshape(1, 4)
a+c
1
2
3
array([[101, 103, 105, 107],
[105, 107, 109, 111],
[109, 111, 113, 115]])
1
2
3
4
5
# 数组与数组进行运算. 与1列同行数的数组运算
a = np.arange(1, 13).reshape(3, 4)
d = np.arange(100, 103).reshape(3, 1)

a+d
1
2
3
array([[101, 102, 103, 104],
[106, 107, 108, 109],
[111, 112, 113, 114]])

数组排序和转置

  • 排序
    1. axis=0 按列排序
    2. axis=1 按行排序
  • 数组行列转置
  • 简便遍历多维数组 arr.flat表示数组的单元

默认按行排序

  • axis=1
1
2
3
ar1 = np.array([[8, 12, 6], [13, 9, 27], [1, 5, 3]])

np.sort(ar1)
1
2
3
array([[ 6,  8, 12],
[ 9, 13, 27],
[ 1, 3, 5]])

按列排序

1
2
3
ar1 = np.array([[8, 12, 6], [13, 9, 27], [1, 5, 3]])

np.sort(ar1, axis=0)
1
2
3
array([[ 1,  5,  3],
[ 8, 9, 6],
[13, 12, 27]])

全部排序

  • 行和列都排序
1
np.sort(np.sort(ar1, axis=0), axis=1)
1
2
3
array([[ 1,  3,  5],
[ 6, 8, 9],
[12, 13, 27]])

数组的转置

1
2
3
4
5
# 创建一个3行4列的数组
arr5 = np.arange(12).reshape(3, 4)

# 行列转置,变成4行3列
arr5.T
1
2
3
4
array([[ 0,  4,  8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])

数组的遍历

列表解析法

1
2
3
4
5
6
7
# 因为是多维数组,有、1个for循环解析得到的依然是个二维列表
a = np.arange(12).reshape(3, 4)

[i for i in a]

# 2个for循环即可遍历2维数组的全部元素
[j for i in a for j in i]
1
2
3
[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8,  9, 10, 11])]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

For循环法

1
2
3
4
5
6
list1 = []
for i in a:
for j in i:
list1.append(j)

list1
1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
1
2
3
4
5
6
# .flat:表示在数组单元中遍历,这样对多维数组简化了for循环
list2 = []
for i in a.flat:
list2.append(i)

list2
1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
1
2
3
4
5
6
7
8
# np.nditer(a) 表示在数组单元中遍历,这样对多维数组简化了for循环
# 这里的i实际是:arrary(0)等,将数组转成列表 i.tolist()
list3 = []

for i in np.nditer(a):
list3.append(i.tolist())

list3
1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

限制数组中的值

  • np.clip
  • 这个函数将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。
1
2
3
a = np.arange(1, 37, 4).reshape(3, 3)

np.clip(a, 10, 25)
1
2
3
array([[10, 10, 10],
[13, 17, 21],
[25, 25, 25]])

数组合并

np.vstack()

  • 行堆栈,一行一行的堆叠
  • 按水平方向(列顺序)堆叠数组构成一个新的数组
1
2
3
4
5
a = np.arange(15).reshape(3, 5)
b = np.array(list("ABCDEFGHIJKLMNO")).reshape(3, 5)

# 将2个2维数组按竖直方向(行)堆栈 变成6行5列的数组
np.vstack((a, b))
1
2
3
4
5
6
array([['0', '1', '2', '3', '4'],
['5', '6', '7', '8', '9'],
['10', '11', '12', '13', '14'],
['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'],
['K', 'L', 'M', 'N', 'O']], dtype='<U11')
1
2
3
4
5
6
# 将1个1维数组按竖直方向(行)堆栈
np.vstack(a[0])


# 将1个2维数组按竖直方向(行)堆栈,结果不变还是原来的样子
np.vstack(a)
1
2
3
4
5
6
7
8
9
array([[0],
[1],
[2],
[3],
[4]])

array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])

np.hstack()

  • 列堆栈,一列一列的堆叠
  • 按竖直方向(行顺序)堆叠数组构成一个新的数组
1
2
# hstack() 可以将一个二维数组展开
np.hstack(a)
1
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
1
2
# 将2个2维数组按水平方向(列)堆栈,相当于在数组右侧增加新的数组
np.hstack((a, b))
1
2
3
4
array([['0', '1', '2', '3', '4', 'A', 'B', 'C', 'D', 'E'],
['5', '6', '7', '8', '9', 'F', 'G', 'H', 'I', 'J'],
['10', '11', '12', '13', '14', 'K', 'L', 'M', 'N', 'O']],
dtype='<U11')

np. dstack()

  • 按深度方向堆栈,改变数组的维度.
1
2
# 将2个2维数组按深度方向堆栈,变成3块5行2列的数组
np.dstack((a, b))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
array([[['0', 'A'],
['1', 'B'],
['2', 'C'],
['3', 'D'],
['4', 'E']],

[['5', 'F'],
['6', 'G'],
['7', 'H'],
['8', 'I'],
['9', 'J']],

[['10', 'K'],
['11', 'L'],
['12', 'M'],
['13', 'N'],
['14', 'O']]], dtype='<U11')

数组的分割

  • np.split(a,3,0)

等分割1维数组

1
2
3
4
5
a = np.arange(10)  

np.split(a, 2)

np.split(a, 5)
1
2
3
[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])]

[array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])]

等分割2维数组

  • np.split(ary, indices_or_sections, axis=0)
1
2
3
4
5
6
7
8
a = np.arange(1, 21).reshape(4, 5)

# 按行方向分割成4个一维数组,个数必须是原数组行数的整除数
np.split(a, 4, axis=0)


# 按列方向分割成5个一维数组,个数必须是原数组列数的整除数
np.split(a, 5, axis=1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[array([[1, 2, 3, 4, 5]]),
array([[ 6, 7, 8, 9, 10]]),
array([[11, 12, 13, 14, 15]]),
array([[16, 17, 18, 19, 20]])]

[array([[ 1],
[ 6],
[11],
[16]]),
array([[ 2],
[ 7],
[12],
[17]]),
array([[ 3],
[ 8],
[13],
[18]]),
array([[ 4],
[ 9],
[14],
[19]]),
array([[ 5],
[10],
[15],
[20]])]

SK 系列刀柄 #4213

4213系列液压刀柄

CAT 系列刀柄 #4216

4216系列液压刀柄

BT 系列刀柄 #4221

4221系列液压刀柄

HSK-C系列刀柄 #4267

4267系列液压刀柄

HSK-C系列刀柄 #4295

4295系列液压刀柄

HSK-C系列刀柄 #4296

4296系列液压刀柄

HSK-A系列刀柄 #4299

4299系列液压刀柄

4*4 法兰刀柄 #4360

4360系列液压刀柄

6*6 法兰刀柄 #4722

4722系列液压刀柄

变径套 #4368

变径套 #4369

调节螺丝 #4900

水管接头 #4949

专用的丝锥刀柄– 柔性–微量自动调整补偿

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
HSK接口:HSK63A,HSK100A
1、普通液压 #4601
2、MQL 单通道 #4602
3、MQL 双通道 #4603
4、MQL 复合通道 #4604

SK,BT接口:3040
1、SK #4576
2、BT #4577

刀柄夹持大小也只有两个尺寸系列:
1、#12 8 to 10 M3 to M12
2、#20 6 to 16 M8 to M20

配套的夹头:分DIN,JIS 均为12-** 或20-** [**代表丝锥柄部直径]
14605
24606 区别于4605多了端面出水

攻丝刀杆 与其他刀柄联接使用:
1、MQL复合通道,连接尺寸20h6 夹持分1220 #4524
2、普通型,连接尺寸头两种: 夹持分1220 #4525
120h6,圆柱形
225h6,带扁位,适合侧固刀柄

4601系列刀柄

4602系列刀柄

4603系列刀柄

4604系列刀柄

4576系列刀柄

4577系列刀柄

4524系列接长杆

4525系列接长杆

适配的夹头

4605

4606