数组

import numpy as np

1.创建数组

1)直接创建数组

arr_1 = np.array([12,3,4,5,6])

arr_3=np.array([[[2.4,1.2,9],[5.6,32,7],[2,1,2]],[[7.6,3.2,6.7],[1,0,0],[1,1,2]],[[3,3,3],[2,1,2],[4,7,65]]])

2)arange函数创建

np.arange(9)  得到一个1行9列的数组

Out[44]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

 

 np.arange(1,10,2)      在[1,10)范围内,间隔为2的数组

Out[74]: array([1, 3, 5, 7, 9])

 

3)random函数创建数组

(1)numpy.random.randint() 

官方文档中给出的用法是:numpy.random.randint(low,high=None,size=None,dtype) 
生成在半开半闭区间[low,high)上离散均匀分布的整数值;若high=None,则取值区间变为[0,low) 
用法及实现 
high=None的情形 

z = np.random.randint(6,size=(2,4))

z

Out[78]:
array([[4, 5, 1, 3],
[2, 2, 2, 2]])

(2)numpy.random.randn() 

官方文档中给出的用法是:numpy.random.rand(d0,d1,…dn) 
以给定的形状创建一个数组,数组元素来符合标准正态分布N(0,1) 
若要获得一般正态分布这里写图片描述则可用sigma * np.random.randn(…) + mu进行表示 
用法及实现: 

n = np.random.randn(2,3)

n
Out[82]:
array([[-0.43622232, 0.48940263, 1.10554077],
[ 1.54972118, 0.12816391, 0.51738574]])

2.数组的两个属性dtypeshape

dtype表示数据类型,shape表示维度大小的元祖

arr_1.dtype 不需要加括号
Out: dtype('int32')

 arr_1 = np.array([1,2.3,3],dtype=np.int32)

arr_1

Out: array([1, 2, 3])  结果数组元素都变为了整型

arr_1.shape
Out[19]: (5,)  一维数组,有5个元素

 

arr_2.dtype
Out[21]: dtype('float64')

 

arr_2.shape
Out[22]: (3, 3, 3) 三维数字,3个元素,3行3列

 

(2)ones,zeros,empty与ones_like,zeros_like,empty_like函数

 arange和reshape函数

1)arange函数

np.arange(9)  得到一个1行9列的数组

Out[44]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

 

 np.arange(1,10,2)      在[1,10)范围内,间隔为2的数组

Out[74]: array([1, 3, 5, 7, 9])

2)reshap函数

t = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8])

t.reshape(3,3)     将数组t变为3行3列数组

Out:
array([[0, 1, 2],
  [3, 4, 5],
  [6, 7, 8]])

3)ones函数

np.ones((3,5))  得到一个3行5列的数值都为1的数组

Out:
array([[ 1., 1., 1., 1., 1.],
   [ 1., 1., 1., 1., 1.],
   [ 1., 1., 1., 1., 1.]])

4)zeros函数

np.zeros(5)  得到一个一行5列的数值都为0的数组

Out: array([ 0.,  0.,  0.,  0.,  0.])

5)empty函数

np.empty((2,3))      空矩阵并不为空,认为空矩阵全为空值或者零值是不对的,空矩阵里面的元素都是返回的垃圾值。

Out: 

array([[ 2.1, 3. , 5. ],
[ 6. , 7. , 8. ]])

6)identity函数

np.identity(4)

Out[44]: 

array([[ 1., 0., 0., 0.],

  [ 0., 1., 0., 0.],

  [ 0., 0., 1., 0.],

  [ 0., 0., 0., 1.]])

7)ones_like,empty_like,zeros_like函数

ones_like,empty_like,zeros_like后面添加的是数组,而ones,empty,zeros后面添加的是shape

结果是一样的

arr_1=np.array([3,4,5,6,7])

np.ones_like(arr_1)

 Out: array([1, 1, 1, 1, 1])

2.数据类型转换astype

arr_1=np.array([1,2,3,5,6])

arr_2= arr_1.astype(np.float64)

arr_2

Out[51]: array([ 1.,  2.,  3.,  5.,  6.])    变为浮点型

 

Astype方法可以将数值型字符串数组直接转化数值型数组。

 

In [19]: numeric_strings=np.array(['12','21','33'],dtype=np.string_)

 

In [21]: numeric_strings.astype(np.float32)

Out[21]: array([ 12., 21., 33.], dtype=float32)

3.数组的简单运算

数组很重要,它能够使你不用编写循环语句就可以对数据执行批量操作,这一优点很重要。因此,在数据分析方面,pythonR语言地位是其它语言无法替代的。

 不用循环语句,直接对数据处理成可以进行批量操作的过程叫做数据矢量化。

例:

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

arr_1 **2

Out:
array([[ 1, 4, 9, 16],
     [25, 36, 49, 64]], dtype=int32)

 

arrt_2=np.array([[1,2,3,4],[2,1,4,3]])

arrt_2 + arr_1
Out[54]:
array([[ 2, 4, 6, 8],
     [ 7, 7, 11, 11]])

4.数组的索引和切片

1)基本切片和索引

arr_1 = np.arange(10)

arr_1[2:4]    注意切片是左闭右开

Out: array([2, 3])

 

arr_1[5]

Out: 5

上面的切片可以重新赋值

列表赋值

arr_1[1:5]=[6,6,6,6]

arr_1

Out[58]: array([0, 6, 6, 6, 6, 5, 6, 7, 8, 9])

 

数组赋值

arr_1[1:6] = np.arage([3,3,3,3,3])

arr_1

Out[63]: array([0, 3, 3, 3, 3, 3, 6, 7, 8, 9])

 

单元赋值

arr_1[1:6]=7       一个标量的赋值或者叫输入瞬间实现整个切片选区的赋值,这就是numpy的广播功能数组有此功能,列表没有.

arr_1

Out[66]: array([0, 7, 7, 7, 7, 7, 6, 7, 8, 9])

 

列表和数组的最大不同:

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

t=arr_1[1:5]

当对t的切片进行赋值时,原数组值会改变,而如果是列表不会改变       此处很容易犯错! 此处很容易犯错! 此处很容易犯错!

t [0:3]=6      

arr_1

Out[86]: array([0, 6, 6, 6, 4, 5, 6, 7, 8, 9])

所以在对数组进行操作时,记得用.copy()

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

t=arr_1[1:5].copy()

t[0:3]=6

arr_1

Out[87]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])   此时原数组的值没有改变

5.数组的交集,并集,差集

test1=np.arange(16).reshape(4,4)

test2 = np.add(test1,np.ones((4,4)))

 test1[0:3,0:3]=np.array([[-3,-6,-4],[-1,2,7],[3,8,2]])

1)交集

np.intersect1d(test1,test2)
Out[13]: array([ 2., 3., 7., 8., 11., 12., 13., 14., 15.])

2)并集

np.union1d(test1,test2)
Out[14]:
array([ -6., -4., -3., -1., 1., 2., 3., 4., 5., 6., 7.,
8., 9., 10., 11., 12., 13., 14., 15., 16.])

3)差集

np.setdiff1d(test1,test2)      属于test1,但是不属于test2
Out[15]: array([-6, -4, -3, -1])

4)并集减去交集

np.setxor1d(test1,test2)
Out[16]: array([ -6., -4., -3., -1., 1., 4., 5., 6., 9., 10., 16.])

 

posted on 2018-03-28 20:31  风过竹影  阅读(178)  评论(0编辑  收藏  举报