numpy 2.0 ndarray

2 ndarray

首先,数组

1、这是啥:N维数组对象:N dimensions array
2、人话:结构特殊的矩阵
3、表示特点:总是套上array()
4、数据特点:同构(同类型)

创建

np.array函数

作用:将Python原生序列对象转变为ndarray

#例如一个列表的转化
word1=[1,2,3,4]
arr1=np.array(word1)
#嵌套列表转多维
word2=[[1,2,3,4],[5,6,7,8]]
arr2=np.array(word2)

注意:格式识别,此函数会尝试推断合适的格式,一般是浮点
具体而言,完整np.array函数为:

np.array(序列,dtype=np.格式)

格式即为python自带的原生格式,例如浮点数即为float64
查看格式

arr1.dtype

赋予数组新的格式

arr1.astype(np.格式)

其他函数

了解作用即可,用到的时候再查询

#创建一个顺序数组
np.arange(数字)
#创建a维b列0数组
np.zeros((a,b))
#创建a嵌套b维c列0数组
np.zeros((a,b,c))
#创建5行4列随机数矩阵
arr2=np.random.randn(5,4)

注意区分zeros和empty

运算

比较简单,基于线代的矩阵运算,不多提(忘了可查高等代数)

索引切片

什么玩意

索引:找到数组中的某个元素的过程
切片:横截面数据型的索引(冒号)
特别之处,这不是R里面的重新生成一个变量,而是一种投射,对此投射的修改会影响整体

file

那可…太惊讶了,这真的很方便吗?
如果想使用传统(R)意义的切片,使用如下代码:

arr1[3:9].copy()

如何使用

与R语言极其相似的调取方法(包括方括号冒号的用法)

基本索引切片

  • 不同于R,这里计数是从0开始的;a:b的意思是a到b-1
  • 高维数组取值(以二维为例),两种表示都行
  • 单独加:号即表示选取全体,:n表示到n-1为止之前全体,n:表示n与n之后全体
    #从第一维选取第二个元素
    arr2d[0][2]
    arr2d[0,2]

布尔型索引

一个恰当长度的布尔型数组可以用于切片索引

  • 布尔型数组
#一个典型的布尔型数组
array([True,False,False,True,False])

如何生成布尔型数组:利用逻辑判断

#利用逻辑判断生成布尔数组,names为一个ndarray
names=='Bill'

提高效率:将生成选取一步完成

data[names!='Bill',a:b]
#a:b作用是对选取后的数组内元素进一步筛选

注意是数组每个维的内部元素,此时将数组整体视为矩阵更好理解(也是这里的本意)

常见应用:将data中负值均转化为0

data[data < 0]=0
#a:b作用是对选取后的数组内元素进一步筛选

这里用到了广播的原理,一个等式,全部改掉

花式索引

定义:利用整数数组进行索引
特点:数组不仅包含了索引对象,还暗含了索引顺序

转置

#完成对矩阵arr的转置
arr.T#一般而言的矩阵

对于复杂高位矩阵,转置需要制定各个轴的具体位置,以后遇到了可以百度

相关函数

提一个经常生成矩阵的arrange函数

#np.arange([start, ]stop, [step, ]dtype=None)
#生成半开区间的值,stop值是要有的
arr.T#一般而言的矩阵

根据实际的使用需求使用
file

如何应用于数据处理

这个地方好处和R的dplyr是一样的,它可以直接矢量化操作,节省了写循环的时间以及耗费的资源

np.where

三元表达式x if cond else y的矢量化(三者一般都是ndarray)

np.where(cond,xarr,yarr)
#当cond为真,选取xarr,为假,选取(执行)yarr
#xarr与yarr可以为标量
#cond可以是逻辑判断(因为逻辑判断可以生成布尔型数组)

条件还可以嵌套(cond本身是两种条件的交集即可)

np.where(c1&c2,0,np.where(c1,1,np.where(c2,2,3)))
#为了理解上的方便,可以等同于excel里面的if语句的嵌套

np.stat.

stat.指的是一系列的聚合计算函数(想起了被sql聚类支配的恐惧)

file

需要注意的是一些函数选项

import numpy as np
arr2=np.random.randn(5,4)
print(arr2)
print(arr2.mean())#所有元素均值
print(arr2.mean(axis=0))#每列均值
print(arr2.mean(axis=1))#每行均值
#利用布尔数组判断原数组大于零的数量
arr1=arr2=np.random.randn(5,5)
print(arr1)
#两种表达均可计数
print((arr1>0).sum())
print(np.sum((arr1>0)))

补充:保留小数位的方法:np.around与np.set_printoptions

import numpy as np
arr3=np.random.randn(5,5)
print(arr3)
#设置小数位置为3位
print(np.around(arr3,3))
np.set_printoptions(precision=3)
print(arr3)

np.sort

此函数不会返回值:这意味着它是在原变量上操作的,注意注意

#ndarray.sort()仅仅修改原来变量
arr4=np.random.randn(3,3)
print(arr4)
#默认axis=1按行排序(可以不写,axis=可以省略),0按列排序(-1最后一个维度)
print(arr4.sort(0))#此时会报None
arr4.sort(0)
print(arr4)

#np.sort生成一个copy
arr5=np.random.randn(3,3)
print(arr5)
#语法无效
np.sort(arr5,axis=1)
print(arr5)
#语法有效
print(np.sort(arr5,axis=1))

np.unique与np.in1d

都属于“匹配-寻找”概念的函数
前者返回distinct值,后者根据数组a查询数组b的成员资格

#查找arr6中arr7元素的情况
arr6=np.array([1,2,3,4,5,6])
arr7=np.array([1,4,6,6])#重复值不影响
print(np.in1d(arr6,arr7))
#out:[ True False False  True False  True]

输入输出

np.save

np.load

其他

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇