numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。
在numpy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。如3D空间中一个点的坐标[1,2,3]
是一个秩为1的数组,因为它只有一个轴,这个轴长度为3,在下面的例子中数组的秩为2(它有两个维度),第一个维度为2,第二个维度为3。
[[ 1., 0., 0.],
[ 0., 1., 2.]]
从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来,数组将序列包含序列转化成二维的数组,序列包含序列包含序列转化成三维数组等等
data1 = np.array([1, 2, 3, 4])
data2 = np.array((1, 2, 3, 4))
data3 = np.array([[1, 2, 3], [4, 5, 6]])
data4 = np.array([(1, 2, 3), (4, 5, 6)])
data5 = np.array([[1, 2], [3, 4]], dtype=complex) # 数组类型可以在创建时显示指定
# np.array(1, 2, 3, 4) # 不能这么创建
函数zeros
创建一个全是0的数组;函数ones
创建一个全1的数组;函数empty
创建一个内容随机并且依赖与内存状态的数组;eye
创建对角都为1,其他元素为0的矩阵(单位矩阵)。
默认创建的数组类型(dtype)都是float64。
data1 = np.zeros(3)
data2 = np.zeros((3, 4))
data3 = np.ones(3)
data4 = np.ones((3, 4), dtype=np.int16) # 也可以指定元素的类型
data5 = np.empty(3)
data6 = np.empty((2, 3))
data7 = np.eye(5)
开始值和步长都可以不指定,开始值默认为0,步长默认为1,最终值取不到。
data1 = np.arange(10) # 默认从0开始到10(10取不到),默认步长为1
data2 = np.arange(0, 18) # 从0开始到18(18取不到),默认步长
data4 = np.arange(0, 18, 2)
开始值和最终值都需要指定,产生个数可以不指定,默认产生50个,最终值取得到。
data1 = np.linspace(0, 49)
data2 = np.linspace(0, 1, 10)
指定元素来提供指定大小的矩阵
data = np.full((2, 3), 8) # 2*3的矩阵里面的元素都是8
data1 = np.random.rand(5) # 产生一个1*5的矩阵,里面的元素为0-1
data2 = np.random.rand(2, 3) # 产生一个2*3的矩阵,里面的元素为0-1
data3 = np.random.rand(2, 3)*5# 产生一个2*3的矩阵,里面的元素为0-5
data4 = np.random.randint(5, size=(2, 3)) # 产生一个2*3的矩阵,里面的元素为0-5
data5 = np.random.randint(5, 10, (2,3)) # 产生一个2*3的矩阵,里面的元素为5-10
下面中arr是指ndarray对象
arr = np.random.randint(1, 5, (2, 3))
l1 = arr.astype(np.int16)
arr = np.random.randint(1, 5, (2, 3))
l1 = arr.tolist()
--------------
arr:
[[112]
[423]]
l1:[[1, 1, 2], [4, 2, 3]]
arr = np.random.randint(1, 5, (2, 3))
arrT = arr.T
--------------
arr:
[[134]
[314]]
arrT:
[[13]
[31]
[44]]
转化矩阵shape为3*4,没有改变元素。通过返回值实现
arr = np.random.randint(1, 5, (3, 4))
arrReshape = arr.reshape((2, 6)) # 等同于arr.reshape(2, 6)
--------------------------
arr:
[[2144]
[2343]
[3224]]
arrReshape:
[[214423]
[433224]]
转为矩阵shape3*5,多余的值用0填充。直接修改原ndarray对象,引用需要为创建出来的引用
arr = np.random.randint(1, 5, (3, 4))
arr.resize((3, 5))
------------------------
arr:
[[31421]
[11412]
[13000]]
'''
下面的这段也会报错
'''
arr = np.random.randint(1, 5, (3, 4))
arr1 = arr.reshape(2, 6)
arr.resize((3, 5))
'''
下面的这段也会报错
'''
arr = np.random.randint(1, 5, (3, 4))
arr1 = arr.reshape(2, 6)
arr1.resize((3, 5))
>>> arr
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]])
>>> arr.sum()
78.0
>>> arr.max()
12.0
>>> arr.min()
1.0
>>> arr
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]])
>>> np.mean(arr)
6.5
比较值是否相等,若每个元素的值相等,并且ndarray的shape一样那么就是True
>>> arr
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]])
>>> arr2
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.]])
>>> np.array_equal(arr, arr2)
True
arr[a, b,...]依次取第一维、第二维,如a就代表第一个维度的取值,b代表第二维度的取值
>>> import numpy as np
>>> arr = np.linspace(1, 12, 12, dtype=np.int16).reshape(3, 4)
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]], dtype=int16)
>>> arr[2] # 对于秩为1来说,取第index=2的元素,对于秩不为1的是在取第一维度index=2的值
array([ 9, 10, 11, 12], dtype=int16)
>>> arr[2, 3]
12
>>> arr[2][3]
12
>>> arr[0:2] # 依次取第一维度下index为0、1的值
array([[1, 2, 3, 4],
[5, 6, 7, 8]], dtype=int16)
>>> arr[0:2, 3] # 依次取第一维度下index为0、1,第二维度下index为3的值
array([4, 8], dtype=int16)
>>> arr[:2] # 从index=0开始
array([[1, 2, 3, 4],
[5, 6, 7, 8]], dtype=int16)
>>> arr[:, 1] # 第一维度下index全取,第二维度下index为1的值
array([ 2, 6, 10], dtype=int16)
在上面的取值操作后面加上赋值操作就好
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]], dtype=int16)
>>> arr[2] = 20
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[20, 20, 20, 20]], dtype=int16)
>>> import numpy as np
>>> arr = np.linspace(1, 12, 12, dtype=np.int16).reshape(3, 4)
>>> arr
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]], dtype=int16)
>>> arr<5# 以boolean矩阵的类型返回,小于5的值为True
array([[ True, True, True, True],
[False, False, False, False],
[False, False, False, False]])
>>> (arr>5) & (arr<10) # 以boolean矩阵的类型返回,大于5且小于10的值为True
array([[False, False, False, False],
[False, True, True, True],
[ True, False, False, False]])
>>> arr[arr<5] # 只取boolean值为True的值,即返回arr中小于5的值
array([1, 2, 3, 4], dtype=int16
np.add(arr, 1) # 返回arr每个元素加1之后的结果
np.add(arr1, arr2) # 返回arr1每个元素与arr2每个元素相加的结果
np.subtract(arr, 2) # 返回arr每个元素减2之后的结果
np.subtract(arr1, arr2) # 返回arr1每个元素减arr2每个元素之后的结果
np.multiply(arr, 2) # 返回与一个标量相乘的结果
np.multiply(arr1, arr2) # 返回arr1每个元素与arr2每个元素相乘之后的结果
np.divide(arr, 0.5) # 返回与一个标量相除的结果
np.divide(arr1, arr2) # 返回arr1每个元素除以arr2每个元素之后的结果
np.power(arr, 2) # 返回与一个标量幂次方的结果
np.power(arr1, arr2) # 返回arr1每个元素以对应位置的arr2元素为幂的结果
np.sqrt(arr) # 返回每个元素平方根之后的结果
np.sin(arr) # 返回每个元素取sin之后的结果
np.log(arr) # 返回每个元素取对数(以e为底)之后的结果
np.abs(arr) # 返回每个元素取绝对值之后的结果
np.ceil(arr) # 返回每个元素向上取整之后的结果
np.floor(arr) # 返回每个元素向下取整之后的结果
np.round(arr) # 返回每个元素取最近int值之后的结果
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有