numpy笔记_python numpy array

numpy笔记_python numpy array初识ndarry

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Numpy

ndarray

numpy的最重要特点就是其N维数组对象(ndarray)。

ndarray的可以对整块数据执行数学运算,语法与标量元素的元素的运算一致。
如:

import numpy as np
x = array([[-0.50043612, -1.99790499,  0.66098891,  0.26490388],
       [-1.02531769,  0.50054972, -1.30755871,  1.53881345]])
x + x #相加
Out[10]: 
array([[-1.00087224, -3.99580998,  1.32197782,  0.52980775],
       [-2.05063538,  1.00109944, -2.61511741,  3.0776269 ]])

x * 10 #乘以标量
Out[11]: 
array([[ -5.0043612 , -19.97904992,   6.60988909,   2.64903877],
       [-10.25317691,   5.00549718, -13.07558707,  15.38813451]])

1 / x #1/x被除
Out[5]: 
array([[-1.99825704, -0.5005243 ,  1.51288469,  3.77495415],
       [-0.97530747,  1.99780353, -0.76478401,  0.64985135]])

x - x #相减
Out[12]: 
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
  • shape查询数组维度
  • ndim数组的维数
  • dtype查询数组数据类型
x.shape
Out[13]: (2, 4) # 2行4列

x.ndim
Out[15]: 2 # 2维

x.dtype
Out[14]: dtype('float64') #数据类型

创建ndarray

1. array函数

将输入数据(列表,元组,数组,或其他),转换为ndarray

y = list(range(1,11)) #如果直接输入y = range(1,11),会返回一个迭代器。
y
Out[33]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

arr1 = np.array(y)
arr1
Out[35]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

z = [[1, 2, 3, 4],[5, 6, 7, 8]]# 生成一个嵌套序列(一组等长列表组成的列表)
arr2 = np.array(z)
arr2
Out[44]: 
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

2. asarray函数

将输入转换为ndarray,若本身是ndarray则不复制。

3. arange函数

arange()是python内置函数range()的数组版。
arange()生成一个一维数组,range生成列表。

np.arange(11) #可对比上文的range理解。
Out[45]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

4. ones,ones_like函数

这里必须说明一下,如果ndarray没有指定数据类型,则默认为float64(浮点数)。

ones根据指定的形状和dtype创建一个全1数组。
ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组。

np.ones(2) #默认一维
Out[46]: array([ 1.,  1.])

np.ones((2,3))
Out[47]: 
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

np.ones(3,dtype = np.int32) # 指定数据类型
Out[51]: array([1, 1, 1])

np.ones_like(arr2) #以arr2为参数
Out[54]: 
array([[1, 1, 1, 1],
       [1, 1, 1, 1]])

5. zeros,zeros_like函数

类似与onesones_like,但是创建的是全0数组。

6. empty,empty_like函数

创建新数组,分配内存空间,但不填充任何值。


np.empty(2)
Out[56]: array([ 0.,  0.])

np.empty((2,4)) #2 * 4
Out[57]: 
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

np.empty_like(arr2) #以arr2为参数
Out[60]: 
array([[0, 0, 0, 0],
       [0, 0, 0, 0]])

看到这里你是不是以为np.empty会返回全0数组?

其实不是的。

np.empty((3,3,2)) # 3维数组
Out[58]: 
array([[[  6.23042070e-307,   4.67296746e-307],
        [  1.69121096e-306,   1.33512376e-306],
        [  1.33511562e-306,   1.11256817e-306]],

       [[  1.06811422e-306,   1.42417221e-306],
        [  1.11260619e-306,   8.90094053e-307],
        [  1.86919378e-306,   1.06809792e-306]],

       [[  1.37962456e-306,   1.69111861e-306],
        [  1.78020169e-306,   1.37961777e-306],
        [  7.56599807e-307,   2.56761491e-312]]])

7. eye,identity函数

返回一个N介单位矩阵。

np.eye(5) # 创建5介单位阵
Out[61]: 
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])

np.identity(5) #创建5介单位阵
Out[63]: 
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])

eye(N, M = None, k = 0,dtype =float)

第一个参数N = 行数。
第二个参数 M = 列数,省略代表M = N 。
第三个参数 k 代表对角线位置, = 0 代表主对角线, +1就向右上方偏移1, -1 就向左下角偏移1。
第四个参数表示类型 dtype 默认为 float 类型。

np.eye(4,k = 1) #向上偏移
Out[69]: 
array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.]])

np.eye(4,k = -1) #向下偏移
Out[70]: 
array([[ 0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.]])

np.eye(4,8) #给定M
Out[67]: 
array([[ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.]])

ndarray的数据类型

numpy所支持的数据类型如下:

数据类型 描述
bool_ 以字节存储的布尔值(True 或 False)
int_ 默认的整数类型(和 C 的 long 一样,是 int64 或者 int32)
intc 和 C 的 int 相同(一般为 int64 或 int32)
intp 用于下标的整数(和 C 的 ssize_t 相同,一般为int64 或者 int32)
int8 字节(-128 到 127)
int16 整数(-32768 到 32767)
int32 整数(-2147483648 到 2147483647)
int64 整数(-9223372036854775808 到 9223372036854775807)
uint8 无符号整数(0 到 255)
uint16 无符号整数(0 到 65535)
uint32 无符号整数(0 到 4294967295)
uint64 无符号整数(0 到 18446744073709551615)
float_ float64 的简写
float16 半精度浮点:1位符号,5位指数,10位尾数
float32 单精度浮点:1位符号,8位指数,23位尾数
float64 双精度浮点:1位符号,11位指数,52位尾数
complex_ complex128 的简写
complex64 由两个32位浮点(实部和虚部)组成的复数
complex128 由两个64位浮点(实部和虚部)组成的复数
string_ 固定长度的字符创类型(每个字符一个字节)

很难记住这些numpy的dtype。我们只需要控制存储类型即可。

arr1 = np.array([1, 2, 3],np.int32)
arr2 = np.array([2,3,4],dtype = np.float64)

arr1.dtype
Out[14]: dtype('int32')
arr2.dtype
Out[11]: dtype('float64')

.astype()方法可以显式的转换为dtype。


float_arr1 = arr1.astype(np.float64) #整型转换为浮点型

float_arr1.dtype 
Out[16]: dtype('float64')

float_arr1
Out[17]: array([ 1.,  2.,  3.])

浮点型转换为整型,只保留整数部分。

arr3 = np.array([2.3, -1.32, -5.9, 4.8])

arr3
Out[25]: array([ 2.3 , -1.32, -5.9 ,  4.8 ])

arr3.astype(np.int32)#转换为整数
Out[26]: array([ 2, -1, -5,  4]) #可看到小数部分被丢弃了

有时某个字符串不能被转换为float64,就会引发TypeError,因此,我们可以懒一点,
像下面这样写:


n_strings = np.array(['1.23','-9.6','23'],dtype = np.string_)

n_strings.astype(np.float)
Out[32]: array([  1.25656565,  -9.6       ,  23.        ])

n_strings.astype(np.float64)
Out[30]: array([  1.25656565,  -9.6       ,  23.        ])

n_strings
Out[35]: 
array([b'1.256565653', b'-9.6', b'23'], 
      dtype='|S11')

可以看到这两种结果一致。

numpy会将其数据类型映射到等价的dtype上。
可以发现,使用.astype()新创建了一个数组(原数组的一种拷贝),即使,与原来数据类型一致也会如此。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166542.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android使用charles抓包

    Android使用charles抓包1.下载并安状软件,官网在此:2.前题条件,电脑和手机必须在同一网段3.在Charles界面选择菜单proxy->proxysettings 勾选”EnabletransparentHTTPproxying”确定代理端口,默认”8888″就可以了4.在手机的wifi节点设置里设置代理。勾选”显示高级选项”,在出现的内容填入代理主机的IP(也就是你装了

  • activiti7实战教程(二)作图「建议收藏」

    activiti7实战教程(二)作图「建议收藏」IDEA:2018.2.2插件:actibpm新建BPMN文件依次拖出需要的组件,最好按照流程的顺序进行拖出,这样后面看xml的时候比较直观。修改每个节点的名称填写每个审批节点的伪码:科室长、分管领导、采购人员、以及网关的伪码表达式这样流程图就做好了。接下来要根据流程图生成XML文件和png图片复制一份流程图,修改名称:后缀名加上20.xml在xml文件上右键到此为止,整个流程图作图就完整的结束了。另外呢告知一点,流程图…

  • Word2Vec原理详解

    Word2Vec原理详解写在前面为了更方便读者学习,笔者下载了word2vec源码共享在云盘(google官网有时会访问不了),地址。还有关于word2vec实战的地址下面是转载内容:word2vec是Google于2013年开源推出的一个用于获取wordvector的工具包,它简单、高效,因此引起了很多人的关注。由于word2vec的作者TomasMikolov在两篇相关的论文[3,4]

  • 【180609】经典SQL语句大全(CHM)

    【180609】经典SQL语句大全(CHM)收集我们在平时使用SQL时的一些语法语句汇集,比如创建、备份、删除数据库的SQL脚本,这些当然是比较简了,还有复杂点的像备份、创建索引、复合SQL语句、创建视图、高级运算查询、EXCEPT运算符、INTERSECT运算符、使用外连接、SQL分组、复制或拷贝表、在线视图查询、存储过程调用、清理SQL、找重复记录等,另附有一些SQL经典技巧,比如精简SQL语句、压缩数据库、检查备份集、日志清除、数…

  • 数仓数据分层(ODS DWD DWS ADS)换个角度看

    数仓数据分层(ODS DWD DWS ADS)换个角度看数仓数据分层简介1.背景数仓是什么,其实就是存储数据,体现历史变化的一个数据仓库.因为互联网时代到来,基于数据量的大小,分为了传统数仓和现代数仓.传统数仓,使用传统的关系型数据库进行数据存储,因为关系型数据库本身可以使用SQL以及函数等做数据分析.所以把数据存储和数据分析功能集合为一体,加上一个可视化界面,就能从数据存储,数据分析,数据展示完整方案.到了互联网时代,由于上网用户剧增,特别是移动互联网时代,海量的网络设备,导致了海量的数据产生,企业需要也希望从这些海量数据中挖掘有效信息,如行为

  • 950. 郁闷的出纳员(Splay树)「建议收藏」

    950. 郁闷的出纳员(Splay树)「建议收藏」OIER 公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号