numpy

numpy

对象属性

属性 说明
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)ndarray

1.生成

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]#结果

2.查看

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

3.索引和切片

与列表相似(复习一下列表的索引)

[1]取第二位数

#左闭右开原则

[1:]取第二位及以后的数,[:2]第三位以前的数(不包含第三位)

[1:3]取第二位到第四位的数(包含第二位,但不包含第四位)

#负索引是闭区间

[1:-2]取第二位到倒数第三位()

[::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]]#将将!问题解决惹

索引(Ture)

######索引与切片不同,索引不是引用机制

一.花式索引

(1)一维花式索引

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对应的元素

(2)二维花式索引

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]

where语句

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()相关系数矩阵

多维数组操作

(1)形状调整

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也可,但还是用前两个

(2)转置(行列数值交换)

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]]

(3)数组拼接

.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

内置函数总结

你可能感兴趣的:(numpy,python)