属性 | 说明 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
首先需要:import numpy as np
1.从列表产生
b=[0,1,2,3]
a=np.array(b)
2.从列表传入
a=np.array([1,2,3,4])
3.生成全零数组
a=np.zeros(5)#生成五个零
4.生成全一的数组
a=np.ones(6,detype='int')#生成六个一#默认浮点型,可通过detype来调整数组类型
5.利用fill填满数列
a.fill(9)#用九填满数列
array([9,9,9,9])#结果
#均可用a=a.astype(‘’)的形式来修改列表数据类型#
6.生成整数序列
a=np.arange(start,end,step)
a=np.arange(1,10,2)#从1到10但不包含10,间隔为2
array([1,3,5,7,9])
7.生成等差数列
a=np.linspace(start,end,number)
a=np.linspace(1,10,4,dtype="int")
[ 1 4 7 10]#效果
8.生成随机数
np.random.rand(10)#零到一的随机数
np.random.randn(10)#满足正态分布的随机数
np.random.randint(start,step,number)#整数随机数
d=np.random.randint(1, 10, 5)
[1 1 4 4 5]#结果
1.查看数组类型
type(a)
2.查看数组中数据类型
a.dtype
3.查看形状(即元素数目)
a.shape/a.size
d=np.random.randint(1, 10, 5)
print(d.shape)
(5,)#返回的元组,第一个显示一维的元素数目
print(np.size(d))
5#直接显示数目
4.查看维度
a.ndim
与列表相似(复习一下列表的索引)
[1]取第二位数
#左闭右开原则
[1:]取第二位及以后的数,[:2]第三位以前的数(不包含第三位)
[1:3]取第二位到第四位的数(包含第二位,但不包含第四位)
#负索引是闭区间
[1:-2]取第二位到倒数第三位()
[::2]间隔为2,从头取到尾(中间隔一个)
a=np.array([[],[]])#一个以列表为元素的列表
a=np.array([[0, 1, 2, 3], [10, 11, 12, 13]])
[[ 0 1 2 3]#result
[10 11 12 13]]
a.shape
(2,4)#result,该元组表示二行四列
a[1,2]#[行,列]#从零开始哦,1是第二行/列
a[:,1]#第二列
a[1,2:5]第二行的第3和第5个元素
###数组的索引是引用机制,即若将a索引出的赋值给b,改动b会影响到a########这点与列表不同
a=np.array([[0, 1, 2, 3], [10, 11, 12, 13]])
c=a[1]
c[0]=9
print(a)
[[ 0 1 2 3]
[ 9 11 12 13]]#可以看到a已经发生改变
解决方法:.copy()
a=np.array([[0, 1, 2, 3], [10, 11, 12, 13]])
c=a[1].copy()
c=a[1].copy()
c[0]=9
print(a)
[[ 0 1 2 3]
[ 10 11 12 13]]#将将!问题解决惹
######索引与切片不同,索引不是引用机制
b=np.linspace(1, 10, 4, dtype="int")
index=[0, 1, -2]
e=b[index]#不要想着中括号里直接写,会报错的,嘿嘿
print(b, e)
[ 1 4 7 10] [1 4 7]
b=np.linspace(1, 10, 4, dtype="int")
mask=np.array([0, 1, 2, 0], dtype=bool)#设置的bool要与元素一一对应(起码数量上),0会判断为Fales,非0为Ture
e=b[mask]
print(b, mask, e)
[ 1 4 7 10] [False True True False] [4 7]#结果输出的是为Ture对应的元素
a=np.array([[0, 1, 2, 3], [10, 11, 12, 13]])
print(a, a[(0, 1), (2, 3)])#即读取为(0行,2列)和(1行,三列)的数
[[ 0 1 2 3]
[10 11 12 13]] [ 2 13]
a=np.array([[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]])
mask=np.array([0, 1, 0, 3], dtype=bool)
e=a[mask, 2]#即对第二列进行一维的布尔花式,交换2与mask位置,可对行进行。只有行时,出现的是整行
print(a, e)
[[ 0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]] [12 32]
b=np.linspace(1, 10, 4, dtype="int")
print(b, b>5, np.where(b>5), b[np.where(b>5)])
[ 1 4 7 10]
[False False True True]
(array([2, 3], dtype=int64),)[7,10]
np.argsort()返回从大到小的排列数组中元素的位置
.median()`中位数
.mean()平均值
.var()方差
.std()标准差
.corrcoef()相关系数矩阵
f=np.arange(6)
f.shape=3, 2
print(f)
[[0 1]
[2 3]
[4 5]]
reshape类似但不会改变原数组
f=np.arange(6)
f.reshape(3, 2)
print(f, f.reshape(3, 2))
[0 1 2 3 4 5]
[[0 1]
[2 3]
[4 5]]
resize也可,但还是用前两个
a.T/a.transpose()
a=np.array([[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]])
print(a.T, a.transpose())
[[ 0 10 20 30]
[ 1 11 21 31]
[ 2 12 22 32]
[ 3 13 23 33]]
[[ 0 10 20 30]
[ 1 11 21 31]
[ 2 12 22 32]
[ 3 13 23 33]]
.concatenate((),axis=)#默认一维拼接
x=np.array([[0, 1, 2, 3], [20, 21, 22, 23]])
y=np.array([[30, 31, 32, 33], [40, 41, 42, 43]])
z=np.concatenate((x, y))
print(z)
[[ 0 1 2 3]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]]
s=np.concatenate((x, y), axis=1)#二维拼接
print(s)
[[ 0 1 2 3 30 31 32 33]
[20 21 22 23 40 41 42 43]]
三维拼接
m=np.array((x, y))
print(m)
[[[ 0 1 2 3]
[20 21 22 23]]
[[30 31 32 33]
[40 41 42 43]]]
np.vstack()一维堆叠
.hstack()二维duidie
.dstack()三维duidie
内置函数总结