Numpy&Pandas基本操作(一)

Numpy&Pandas基本操作(一)

Numpy

Numpy 中的属性

我们通过dir(numpy)可以看到,numpy 有很多的属性和方法,我们简单的介绍以下几种.

创建一个矩阵

我们可以使用numpy.array来创建一个矩阵,当然这个矩阵可以是 N 维的,创建的时候,需要传入一个数组,数组是多少维,创建的矩阵就是多少维.
创建矩阵的时候,也可以传入第二个参数(dtype), 指定数据类型.

1
2
3
4
5
6
7
8
9
10
import numpy as np

array = np.array([[1,2,3],
[4,5,6],
[7,8,9]], dtype=np.float64)
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
type(array)
numpy.ndarray

Numpy 中的数据类型(dtype)

布尔(Booleans):

类型 备注 字符代码
bool_ 兼容:Python bool ‘?’
bool8 8 位

整数(Integers):

类型 备注 字符代码
byte 兼容:C char ‘b’
short 兼容:C short ‘h’
intc 兼容:C int ‘i’
int_ 兼容:Python int ‘l’
longlong 兼容:C long ‘q’
intp 以计算机的位数作为动态长度,保证能够存储指针. ‘p’
int8 8 位
int16 16 位
int32 32 位
int64 64 位

无符号整数(Unsigned integers):

类型 备注 字符代码
ubyte 兼容:C unsigned char ‘B’
ushort 兼容:C unsigned short ‘H’
uintc 兼容:C unsigned int ‘I’
uint 兼容:Python int ‘L’
ulonglong 兼容:C long ‘Q’
uintp 以计算机的位数作为动态长度,保证能够存储指针. ‘P’
uint8 8 位
uint16 16 位
uint32 32 位
uint64 64 位

浮点数字(Floating-point numbers):

类型 备注 字符代码
half ‘e’
single 兼容:C float ‘f’
double 兼容:C double
float_ 兼容:Python float ‘d’
longfloat 兼容:C longfloat ‘g’
float16 16 位
float32 32 位
float64 64 位
float96 96 位,与平台相关
float128 128 位,与平台相关

复数浮点数(Complex floating-point numbers):

类型 备注 字符代码
csingle ‘F’
complex_ 兼容:Python 复数 ‘D’
clongfloat ‘G’
complex64 两个 32 位浮点数
complex128 两个 64 位浮点数
complex192 两个 96 位浮动,与平台相关
complex256 两个 128 位浮点数,与平台相关

任何 Python 对象(Any Python object):

类型 备注 字符代码
object_ 任何 Python 对象

数组的常用属性

有关数组内存布局的信息。

具体的解释,可以看这里(英文)
这里(中文),
内置的标量类型.

这里具体解释一下C_CONTIGUOUSF_CONTIGUOUS, numpy在内存中存储矩阵的方式有两种,一种是C.style,
一种是Fortran.style, 可以通过ndarray.setflags来修改.

Fortran 和 matlab 语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而 c
语言中的多维数组存储方式为行优先原则,内循环最好是行循环。编写程序的时候,让循环方式和存储方式匹配可以有效地提高程序的运行速度.

1
2
3
4
5
6
7
8
ndarray.flags
# C_CONTIGUOUS : True
# F_CONTIGUOUS : False
# OWNDATA : True
# WRITEABLE : True
# ALIGNED : True
# WRITEBACKIFCOPY : False
# UPDATEIFCOPY : False

数组维度信息(是一个元组)。

1
2
ndarray.shape
# (3, 3)

遍历数组时每个维度中的字节元组。

1
2
array.strides
# (24, 8)

数组维数。

1
2
array.ndim
# 2

Python 缓冲区对象指向数组的数据的开头。

1
2
array.data
# <memory at 0x11072fad0>

数组中的元素数。

1
2
array.size
# 9

一个数组元素的长度,以字节为单位

1
2
array.itemsize
# 8

数组元素消耗的总字节数。

1
2
array.nbytes
# 72

如果内存来自其他对象,则为基础对象, 否则为空

1
array.base

数组的常用方法

数组转换

方法 描述
ndarray.item(*args) 将数组元素复制到标准 Python 标量并返回它。
ndarray.tolist() 将数组作为 a.ndim-levels 深层嵌套的 Python 标量列表返回。
ndarray.itemset(*args) 将标量插入数组(如果可能,将标量转换为数组的 dtype)
ndarray.tostring([order]) 构造包含数组中原始数据字节的 Python 字节。
ndarray.tobytes([order]) 构造包含数组中原始数据字节的 Python 字节。
ndarray.tofile(fid[, sep, format]) 将数组作为文本或二进制写入文件(默认)。
ndarray.dump(file) 将数组的 pickle 转储到指定的文件。
ndarray.dumps() 以字符串形式返回数组的 pickle。
ndarray.astype(dtype[, order, casting, …]) 数组的副本,强制转换为指定的类型。
ndarray.byteswap([inplace]) 交换数组元素的字节
ndarray.copy([order]) 返回数组的副本。
ndarray.view([dtype, type]) 具有相同数据的数组的新视图。
ndarray.getfield(dtype[, offset]) 返回给定数组的字段作为特定类型。
ndarray.setflags([write, align, uic]) 分别设置数组标志 WRITEABLE,ALIGNED,(WRITEBACKIFCOPY 和 UPDATEIFCOPY)。
ndarray.fill(value) 使用标量值填充数组。

形状操作

对于重新n整形,调整大小和转置,单个元组参数可以用将被解释为 n 元组的整数替换。

方法 描述
ndarray.reshape(shape[, order]) 返回包含具有新形状的相同数据的数组。
ndarray.resize(new_shape[, refcheck]) 就地更改数组的形状和大小。
ndarray.transpose(*axes) 返回轴转置的数组视图。
ndarray.swapaxes(axis1, axis2) 返回数组的视图,其中 axis1 和 axis2 互换。
ndarray.flatten([order]) 将折叠的数组的副本返回到一个维度。
ndarray.ravel([order]) 返回一个扁平的数组。
ndarray.squeeze([axis]) 从形状除去单维输入一个。

项目选择和操作

对于采用 axis 关键字的数组方法,默认为 None。 如果 axis 为 None ,则将数组视为 1-D 数组。 轴的 任何其他值表示操作应继续进行的维度。

方法 描述
ndarray.take(indices[, axis, out, mode]) 返回由给定索引处的 a 元素组成的数组。
ndarray.put(indices, values[, mode]) 为索引中的所有 n 设置。a.flat[n] = values[n]
ndarray.repeat(repeats[, axis]) 重复数组的元素。
ndarray.choose(choices[, out, mode]) 使用索引数组从一组选项中构造新数组。
ndarray.sort([axis, kind, order]) 对数组进行就地排序。
ndarray.argsort([axis, kind, order]) 返回将对此数组进行排序的索引。
ndarray.partition(kth[, axis, kind, order]) 重新排列数组中的元素,使得第 k 个位置的元素值位于排序数组中的位置。
ndarray.argpartition(kth[, axis, kind, order]) 返回将对此数组进行分区的索引。
ndarray.searchsorted(v[, side, sorter]) 查找应在其中插入 v 的元素以维护顺序的索引。
ndarray.nonzero() 返回非零元素的索引。
ndarray.compress(condition[, axis, out]) 沿给定轴返回此数组的选定切片。
ndarray.diagonal([offset, axis1, axis2]) 返回指定的对角线。

数组计算

方法 描述
ndarray.max([axis,out,keepdims,initial,…]) 沿给定轴返回最大值。
ndarray.argmax([axis, out]) 返回给定轴上的最大值的索引。
ndarray.min([axis,out,keepdims,initial,…]) 沿给定轴返回最小值。
ndarray.argmin([axis, out]) 沿给定一个轴线返回最小值的索引。
ndarray.ptp([axis, out, keepdims]) 沿给定轴的峰峰值(最大值 - 最小值)。
ndarray.clip([min,max,out]) 返回值限制为的数组。$[\min, \max]$
ndarray.conj() 复合共轭所有元素。
ndarray.round([decimals, out]) 返回 a,每个元素四舍五入到给定的小数位数。
ndarray.trace([offset, axis1, axis2, dtype, out]) 返回数组对角线的总和。
ndarray.sum([axis, dtype, out, keepdims, …]) 返回给定轴上的数组元素的总和。相当于$\sum$
ndarray.cumsum([axis, dtype, out]) 返回给定轴上元素的累积和。
ndarray.mean([axis, dtype, out, keepdims]) 返回给定轴上数组元素的平均值。
ndarray.var([axis, dtype, out, ddof, keepdims]) 返回给定轴的数组元素的方差。
ndarray.std([axis, dtype, out, ddof, keepdims]) 返回沿给定轴的数组元素的标准偏差。
ndarray.prod([axis, dtype, out, keepdims, …]) 返回给定轴上的数组元素的乘积。相当于$\prod$
ndarray.cumprod([axis, dtype, out]) 返回沿给定轴的元素的累积乘积。
ndarray.all([axis, out, keepdims]) 如果所有元素都计算为 True,则返回 True。
ndarray.any([axis, out, keepdims]) 如果有任何一个元素计算为 True,则返回 true。

算术、矩阵乘法和比较运算

numpy对于大多数的运算符也都做了重写,具体如下:

比较运算符:

方法 描述
ndarray.lt(self, value, /) 返回 self<value.
ndarray.le(self, value, /) 返回 self<=value.
ndarray.gt(self, value, /) 返回 self>value.
ndarray.ge(self, value, /) 返回 self>=value.
ndarray.eq(self, value, /) 返回 self==value.
ndarray.ne(self, value, /) ;返回 self!=value.

array(bool)的真值测试:

方法 描述
ndarray.bool(self, /) self != 0

一元操作:

方法 描述
ndarray.neg(self, /) -self
ndarray.pos(self, /) +self
ndarray.abs(self)
ndarray.invert(self, /) ~self

一元操作:

方法 描述
ndarray.neg(self, /) -self
ndarray.pos(self, /) +self
ndarray.abs(self)
ndarray.invert(self, /) ~self

算术:

方法 描述
ndarray.add(self, value, /) 返回 self+value.
ndarray.sub(self, value, /) 返回 self-value.
ndarray.mul(self, value, /) 返回 self*value.
ndarray.truediv(self, value, /) 返回 self/value.
ndarray.floordiv(self, value, /) 返回 self//value.
ndarray.mod(self, value, /) 返回 self%value.
ndarray.divmod(self, value, /) 返回 divmod(self, value).
ndarray.pow(self, value[, mod]) 返回 pow(self, value, mod).
ndarray.lshift(self, value, /) 返回 self<<value.
ndarray.rshift(self, value, /) 返回 self>>value.
ndarray.and(self, value, /) 返回 self&value.
ndarray.or(self, value, /) 返回 self
ndarray.xor(self, value, /)

就地算术运算方法:

方法 描述
ndarray.iadd(self, value, /) 返回 self+=value。
ndarray.isub(self, value, /) 返回 self==value。
ndarray.imul(self, value, /) 返回 self*=value。
ndarray.itruediv(self, value, /) 返回 self/=value。
ndarray.ifloordiv(self, value, /) 返回 self//=value。
ndarray.imod(self, value, /) 返回 self%=value。
ndarray.ipow(self, value, /) 返回 self**=value。
ndarray.ilshift(self, value, /) 返回 self<<=value。
ndarray.irshift(self, value, /) 返回 self>>=value。
ndarray.iand(self, value, /) 返回 self&=value。
ndarray.ior(self, value, /) 返回 self
ndarray.ixor(self, value, /) 返回 self^=value。

矩阵乘法:

方法 描述
ndarray.matmul(self, value, /) 返回 self@value

Pandas

下一篇再写吧

Numpy&Pandas基本操作(一)

https://www.borgor.cn/posts/341bf49e.html

作者

Cyrusky

发布于

2020-03-09

更新于

2024-11-18

许可协议

评论