NumPy 提供了一个N 维数组类型 ndarray,它描述了相同类型的 items 的集合。
import numpy as np
# 创建ndarray
score = np.array([[80, 89, 86, 67, 79],[78, 97, 89, 67, 81]])
# 打印结果
score
输出:
array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81]])
import numpy as np
# 创建不同形状的数组
a = np.array([[1, 2, 3],[4, 5, 6]])
b = np.array([1, 2, 3, 4])
c = np.array([[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6.0]]])
# 分别打印出形状
print(a.shape)
print(b.shape)
print(c.shape)
输出:
(2, 3)
(4,)
(2, 2, 3)
import numpy as np
# 创建不同形状的数组
a = np.array([[1, 2, 3],[4, 5, 6]])
b = np.array([1, 2, 3, 4])
c = np.array([[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6.0]]])
# 分别打印出维数
print(a.ndim)
print(b.ndim)
print(c.ndim)
输出:
2
1
3
ndarray 的类型:
import numpy as np
# 创建数组时指定类型为 np.float32
a = np.array([[1, 2, 3],[4, 5, 6]], dtype=np.float32)
# 创建数组时未指定类型
b = np.array([[1, 2, 3],[4, 5, 6]])
# 打印结果
print("数组a:\n%s,\n数据类型:%s"%(a,a.dtype))
print("数组b:\n%s,\n数据类型:%s"%(b,b.dtype))
生成全部元素值为 0 的数组
import numpy as np
zero = np.zeros([3, 4])
zero
生成全部元素值为 1 的数组
one = np.ones([3, 4])
one
生成对角数组(对角线的地方是 1,其余地方是 0)
eyes = np.eye(10, 5)
eyes
生成固定范围的数组
# 生成等间隔的数组
a = np.linspace(0, 90, 10)
a
# 生成等间隔的数组
b = np.arange(0, 90, 10)
b
形状修改
from numpy import array
a = array([[ 0, 1, 2, 3, 4, 5],
[10,11,12,13,14,15],
[20,21,22,23,24,25],
[30,31,32,33,34,35]])
a.shape
# 在转换形状的时候,一定要注意数组的元素匹配
# 只是将形状进行了修改,但并没有将行列进行转换
b = a.reshape([3, 8])
b
# 数组的形状被修改为: (2, 12), -1: 表示同过自动计算得到此处的值
c = a.reshape([-1, 12])
c
d = a.T
d.shape
类型修改
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])
arr.dtype
arr.astype(np.float32)
数组去重
arr = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
np.unique(arr)
数据计算
函数还可以接受第三个参数,表示将结果存入第三个参数中:
np.multiply(a, b, a)
矩阵
使用 mat 方法将 2 维数组转化为矩阵:
import numpy as np
a = np.array([[1, 2, 4],
[2, 5, 3],
[7, 8, 9]])
A = np.mat(a)
A
# 也可以使用 **Matlab** 的语法传入一个字符串来生成矩阵:
A = np.mat('1,2,4;2,5,3;7,8,9')
A
A.I 表示 A 矩阵的逆矩阵
指定求和的维度: 沿着第一维求和
from numpy import array
a = array([[1, 2, 3],
[4, 5, 6]])
a
np.sum(a, axis=0)
输出:array([5, 7, 9])
沿着第二维求和:
np.sum(a, axis=1)
a.sum(axis=1)
输出:array([ 6, 15])
数组元素的比对,我们可以直接使用运算符进行比较,比如判断数组中元素是否大于某个数:
from numpy import array
a = array([[ 0, 1, 2, 3, 4, 5],
[10,11,12,13,14,15],
[20,21,22,23,24,25],
[30,31,32,33,34,35]])
a > 10
# 判断数组中元素大于10的元素赋值为 -10
a[a > 10] = -10
a
但是当数组元素较多时,查看输出结果便变得很麻烦,这时我们可以使用all()方法,直接比对矩阵的所有对应的元素是否满足条件。假如判断某个区间的值是否全是大于 20:
from numpy import array
a = array([[ 0, 1, 2, 3, 4, 5],
[10,11,12,13,14,15],
[20,21,22,23,24,25],
[30,31,32,33,34,35]])
a[1:3,1:3]
输出:
array([[11, 12],
[21, 22]])
np.all(a[1:3,1:3] > 20)
#使用 any() 来判断数组某个区间的元素是否存在大于 20的元素:
np.any(a[1:3,1:3] > 20)
savetxt 可以将数组写入文件,默认使用科学计数法的形式保存:
import numpy as np
data = np.array([[1, 2],
[3, 4]])
# 保存文件
np.savetxt('out.txt', data)
# 读取文件
np.loadtxt('out.txt')