- Python中Numpy库array数组
- 1.创建数组的方式
- 2.数组的方法
- 3.特殊数组
- 4.数组的变换
- 4.1.数组维度的变换
- 4.2.数组类型的变换
- 4.3.数组向列表转换
- 4.4.数组的转置变换
- 5.数组索引
- 6.数组的运算
- 7.数组的拷贝
- 8.数组的排序
- 9.线性代数相关计算
Python中Numpy库array数组
1.创建数组的方式
数组 |
说明 |
array |
直接传入数值 |
arange(a,b,c) |
三个参数的含义分别为:开始值、结束值、步长(不包括结束值) |
linspace(a,b,c) |
三个参数含义分别为:开始值、结束值、元素数量(包括结束值) |
concatenate |
两个数组拼接 |
示例:
x = array([[1, 1, 1], [2, 2, 2]])
y = arange(0, 15, 1).reshape(3, 5)
print(y)
z = linspace(0, 4, 5)
print(z)
a = array([1, 2, 3])
b = array([4, 5, 6])
w = concatenate((a, b))
print(w)
2.数组的方法
方法 |
说明 |
size |
数组元素的总个数 |
ndim |
数组维度数 |
shape |
数组的维数 |
dtype |
数组的元素类型 |
itemsize |
每个元素占有字节的大小 |
data |
数组元素的缓冲区 |
示例:
x = array([[1, 1, 1], [2, 2, 2]])
print(x)
print(x.size)
print(x.ndim)
print(x.shape)
print(x.dtype)
print(x.itemsize)
print(x.data)
3.特殊数组
方法 |
说明 |
zeros |
全零数组 |
ones |
全一数组 |
empty |
空数组 元素都接近0 |
eye |
单位矩阵 |
full(shape,val) |
生成数量为shape的元素全为val的数组 |
ones_like(a) |
根据数组a的形状生成全是1的数组 |
zeros_like(a) |
根据数组a的形状生成全是0的数组 |
full_like(a,value) |
根据数组a的形状生成全是value的数组 |
a = zeros((3, 4))
print(a)
b = ones((3, 4))
print(b)
c = empty((4, 4))
print(c)
d = eye(3)
print(d)
e = full(4, 2)
print(e)
f = ones_like(d)
print(f)
g = zeros_like(d)
print(g)
h = full_like(d, 3)
print(h)
4.数组的变换
4.1.数组维度的变换
方法 |
说明 |
reshape |
不修改原数组 |
resize |
改变原数组 |
flatten |
对数组降维,返回折叠后的一维数组,原数组不变 |
swapaxes(arr,ax1,ax2) |
对数组arr中的两个维度进行交换 |
示例:
i = ones((2, 3, 4), dtype=int32)
j = i.reshape((3, 2,4))
print(j)
print(i)
print(i)
i.resize((3, 8))
print(i)
k = i.flatten()
print(k)
l = array([[2, 3, 4], [5, 6, 7]])
print(l)
m = swapaxes(l, 0, 1)
print(m)
n = array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
o = swapaxes(n, 0, 2)
print(o)
4.2.数组类型的变换
方法 |
说明 |
astype |
类型变换,一定会创建新的数组,即使两个类型一致(原始数据的一个拷贝) |
示例:
p = ones((2, 3, 4), dtype=int)
print(p)
q = p.astype(float)
4.3.数组向列表转换
示例:
p = ones((2, 3, 4), dtype=int)
print(p)
r = p.tolist()
print(r)
4.4.数组的转置变换
示例:
s = array([[1, 2, 3], [4, 5, 6]])
print(s.T)
5.数组索引
5.1.一维数组的索引
a = array([2, 3, 4, 5, 6])
print(a[2])
print(a[-2])
print(a[1:4:2])
5.2.多为数组的索引
d = arange(24).reshape(2, 3, 4)
print(d)
print(d[1, 0, 1])
print(d[1, 0, :])
print(d[:, :, ::2])
6.数组的运算
方法 |
说明 |
abs(x),fabs(x) |
计算数组各元素的绝对值 |
sqrt(x) |
各元素的平方根 |
square(x) |
各元素的平方 |
log(x),log10(x),log2(x) |
各元素的自然对数、10底对数和2底对数 |
ceil(x) ,floor(x) |
各元素向上取整、向下取整 |
rint(x) |
各元素四舍五入的值 |
modf(x) |
各元素小数和整数部分以两个独立数组返回 |
cos(x),cosh(x),sin(x),sinh(x),tan(x),tanh(x) |
三角函数值 |
exp(x) |
各元素的指数值 |
sign(x) |
各元素的符号值 1(+),0,-1(-) |
where(判断条件,值1,值2) |
条件运算,满足条件赋值1,不满足赋值2,类似于三目运算符 |
示例:
e = array([20.1, 30.9, 40, 50])
ee = arange(1, 5)
print(e + ee)
print(e - ee)
print(e * ee)
print(e / ee)
print(e ** ee)
print(e.sum())
print(sum(e))
print(e.max())
print(e.min())
print(e.mean())
print(e * 2)
print(floor(e))
print(ceil(e))
print(modf(e))
f = array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
g = where(f < 80, '良好', '优秀')
print(g)
7.数组的拷贝
7.1.浅拷贝
- 浅拷贝,只拷贝数组的引用,如果对拷贝进行修改,源数组也将修改
f = ones((2, 3))
print(f)
g = f
g[0, 0] = 2
print(g)
print(f)
7.2.深拷贝
- 深拷贝会复制一份和源数组一样的数组,新数组与源数组会存放在不同内存位置,因此对新数组的修改不会影响源数组
h = ones((2, 3))
print(h)
i = h.copy()
i[0, 0] = 2
print(i)
print(h)
8.数组的排序
a = array([[2, 3, 1], [1, 6, 5]])
print(sort(a))
print(sort(a, axis=0))
print(sort(a, axis=1))
9.线性代数相关计算
方法 |
说明 |
dot(a, b) |
矩阵a,b相乘 |
vdot(a,b) |
向量点积,对应位置相乘相加 |
inner |
向量乘积 |
matmul(a,b) |
矩阵乘积 |
® |
求行列式的值 |
(r,t) |
计算线性方程组的解 |
a = array([[1, 2], [3, 4]])
b = array([[5, 6], [7, 8]])
c = dot(a, b)
print(c)
d = vdot(a, b)
print(d)
e = array([1, 2, 3])
f = array([4, 5, 6])
g = inner(e, f)
print(g)
h = inner(a, b)
print(h)
i = array([[1, 0], [0, 1]])
j = array([[1, 2], [3, 4]])
k = matmul(i, j)
print(k)
l = array([1, 2])
m = matmul(j, l)
print(m)
n = matmul(l, j)
print(n)
o = arange(8).reshape(2, 2, 2)
p = array([[0, 1], [2, 3]])
q = matmul(o, p)
print(q)
r =array([[1,2],[3,4]])
s = linalg.det(r)
print(s)
t =array([2,3])
u = linalg.solve(r,t)
print(u)