Numpy数组使用总结

1.Numpy数组的创建

1.1 手动创建

1.创建一维数组

a = np.array([2, 5, 1, 4, 3, 9, 8])

2.创建二维数组

a = np.array([[2, 5, 1, 4, 3, 9, 8],[2,3,4,5,6,1,3]])

3.更高维数组以此类推
。。。。。。

1.2利用函数的创建

numpy拥有丰富的函数用于创建各式各样的多维数组,例如全0数组,全1数组,服从正态分布的数组等。
1.利用函数创建全0或者全1数组

a = np.zeros(10)
[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]

b = np.zeros(shape=(2,3))
[[ 0.  0.  0.]
 [ 0.  0.  0.]]

c = np.ones(shape=(2,4))
[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]

2.生成空的数组(内部的值是随机初始化的值),不建议使用。

d = np.empty(shap=(2,3))
[[  1.32971156e-152   2.45883933e+198   2.31634004e-152]
 [  2.21705231e+068   2.45886150e+198  -5.68511526e-310]]

3.生成正态分布的数组(数组里面的所有元素服从正态分布)

b = np.random.normal(size=(10,2,4))

numpy.random模块对python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本生成函数。

4.创建元素有序增减的数组

a = np.arange(1, 10, 0.5)
[ 1.   1.5  2.   2.5  3.   3.5  4.   4.5  5.   5.5  6.   6.5  7.   7.5  8.  8.5  9.  9.5]

1:指定起始值(能够取到)、10:终止值(取不到),0.5:步长。区间遵守左必又开原则。

如果要生成这样的数组呢?
[[ 0 1 2 3 4 5]
[10 11 12 13 14 15]
[20 21 22 23 24 25]
[30 31 32 33 34 35]
[40 41 42 43 44 45]
[50 51 52 53 54 55]]
可以用以下的的方式:

a = np.arange(0, 60, 10)#1
b = np.arange(6)#2
c = a.reshape((-1, 1))#3
d = c + b #4

a: [ 0 10 20 30 40 50]
b: [ 0 1 2 3 4 5]
c:
[[ 0]
[10]
[20]
[30]
[40]
[50]]
c + b利用广播机制,得到的上述数组。
说明:reshape方法,可以创建改变了尺寸的新数组,原数组的shape保持不变,如果使用a.shape = (-1,1)不会得到新副本。例如从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置并没有改变

2.Numpy数组的切片

需要注意的是,通过切片得到的数组是原数组的一个视图,与原数组共享内容空间,如果直接修改切片数组,会影响原数组。

A = np.array([0, 1, 2])
a = A[0:1]
a[0] = 5
print(A)
#########
[5 1 2]

2.1读取一个元素
1维数组a[i]
2维数据a[i][j]
以此类推……

2.2读取一行中第x到第y的数据,或者跳着读,或者反着读
2.2.1a是一维数组
a[x:y] #第y是读不到的,左闭又开
a[:y] #从0到y的数据
a[x:y:step] #step为读取步长

2.2.2读取特定一行,a为二维数组
a[i] # 读取第i行

2.2.3读取特定的几行(如第0行,第2行,第3行)
a[[0,2,3]]
#如果行标是连续的,可以直接写成
a[x:y]

2.2.4读取数组中某一区域的数组,比如第1-2行,2-3列的数据
a[1:3,[2,3]],
但是如果是这样的话,a[[0, 1, 2], [2, 3, 4]],读取的数据为a[0][2],a[1][3],a[2][4].可以再研究一下。

2.2.5读取特定一列(几列),a为二维数组
1.先将a转置,a.T
2.在读取第0行a.T[0](也就是一开始的第0列。
或者a[:,1] 取出第1列

2.2.6选出数组中大(小,等)于某个值的所有元素
#a为一维数组
a = np.random.rand(10)
print a > 0.5 # 得到 [False True False True True False True True False False]
如果a是二维数组,则返回一个二维的bool数组。
a[a>0.5] # 得到a中大于0.5的数据
#a为二维数组,按某列的值得大小,得到一整行
步骤大概是,1将a转置,取出对应的行(也就是原始的列),通过遍历得到True的下标,然后用下标取出原始数组对应的行。

#####利用for循环对numpy进行遍历
a = np.arange(15).reshape(5,-1)
for i in a: #得到第i行
for j in i: # 得到第i行中,第j个元素
print j

3.元素去重

3.1一维数组元素去重

直接使用库函数unique
a = np.array((1, 2, 3, 4, 5, 5, 7, 3, 2, 2, 8, 8))
b = np.unique(a)
a:[1 2 3 4 5 5 7 3 2 2 8 8]
b:[1 2 3 4 5 7 8]

3.2二维数组元素去重

如果直接使用unique二维数组的去重,结果就会变成如下这个样子。

c = np.array(((1, 2), (3, 4), (5, 6), (1, 3), (3, 4), (7, 6)))
np.unique(c)
#############
[1 2 3 4 5 6 7]
方案一:转化为虚数

r, i = np.split(c, (1, ), axis=1)
x = r + i * 1j
x = c[:, 0] + c[:, 1] * 1j
print ‘转换成虚数:’, x
print ‘虚数去重后:’, np.unique(x)
print np.unique(x, return_index=True) # 思考return_index的意义
idx = np.unique(x, return_index=True)[1]

方案二:利用set
np.array(list(set([tuple(t) for t in c])))
3.2 一维数组重复元素统计

利用pandas的顶级函数value_counts()

b = np.array([1,1,2,2,4,4])
print(pd.value_counts(b))
4    2
2    2
1    2

此方法返回的是series对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值