数据科学包——初识numpy(创建、属性、运算)

一、Numpy简介

  • Numpy是Python语言的一个library numpy
  • Numpy主要支持矩阵操作和运算
  • 现在比较流行的机器学习框架(例如Tensorflow/PyTorch等等),语法都与Numpy比较接近

二、numpy创建数组

1.dtype定义格式

import numpy as np
a=np.array([2,3,4],dtype=np.int64)
print(a.dtype)
>>>
int64

2.定义矩阵

  • array函数
a=np.array([2,3,4],
		   [2,3,4])
  • zero函数
a=np.zero((3,4)) #三行四列零矩阵
  • ones函数
a=np.ones() #所有元素都是1的矩阵
  • arange函数
a=np.arange(10,20,2) #以10起始,到20终止(不包括20),以2为步长的数组
>>>
[10 12 14 16 18]
  • reshape函数
a=np.arange(12).reshape((3,4)) #一行十二列,重置格式为三行四列
  • linspace函数:
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
作用为:在指定的大间隔内,返回固定间隔的数据。他将返回“num”个等间距的样本,在区间[start, stop]中。其中,区间的结束端点可以被排除在外。

a=np.linspace(1,10,4) 
>>>
[ 1.  4.  7. 10.]

三、numpy属性

1.创建一个数组

import numpy as np
array=np.array([[1,2,3],[2,3,4]])
print(array)
>>>
[[1 2 3]
 [2 3 4]]

2.查看数组维度

ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度。

print('number of dim:',array.ndim)
>>>
number of dim: 2

3.查看数组类型

print('shape:',array.shape)
>>>
shape: (2, 3)

4.查看数组元素个数

print('size:',array.size)
>>>
size: 6

四、numpy基础运算

1.数组的加减幂乘

1.1 加减幂

  • 加减
import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
print(a)
print(b)
c = a + b
d= a-b
# c = b ** 2  # b的平方
print(c)
print(d)

对应位置相加减

[10 20 30 40]
[0 1 2 3]
[10 21 32 43]
[10 19 28 37]
  • 幂和三角函数
e=b**2 #b数组的每一个元素求平方
f=10*np.sin(a) #a数组每一个元素的sin函数
>>>
[0 1 4 9]
[-5.44021111  9.12945251 -9.88031624  7.4511316 ]

1.2 乘法

  • 对应想乘:c=a*b
print(c)
>>>
[  0  20  60 120]
  • 矩阵的乘法:两种表达方式结果一样
    (1)c_dot=np.dot(a,b)
a=np.array([[2,4],[2,4]])
print(a)
b=np.array([[2,2],[2,2]])
c_dot=np.dot(a,b)
print(c_dot)
>>>
[[2 4]
 [2 4]]
[[12 12]
 [12 12]]

(2)c_dot=a.dot(b)

c_dot=a.dot(b)
print(c)
>>>
[[12 12]
 [12 12]]

2.统计数学运算

a=np.array([[2,4],[2,4]])
np.sum(a) #所有数字的和
np.min(a) #找到最小值
np.max(a) #找到最大值
np.mean(a,axis=0)#对于列进行计算平均值 
>>>
12
2
4
[2. 4.]

a=np.array([[4,2],[3,4]])
print(np.median(a,axis=0)) #对于列取中位数
>>>
[3.5 3. ]
  • 按行、列求和
a=np.array([[2,4],[2,4]])
np.sum(a,axis=1)#行求和,axis=0是列
>>>
[6 6]

3.其他基础运算

3.1 arg***函数

numpy.argmin(a,axis=None,out=None)[source]

给出axis方向最小值的下标

  • 参数:
    a:Input array.
    axis:默认将输入数组展平。否则,按照axis方向
    out:可选
  • 返回值
    index_array:下标组成的数组。shape与输入数组a去掉axis的维度相同。
    注:多个最小值,只显示第一个

试验:

import numpy as np
a=np.array([[4,2],
			[0,4]])
print(np.argmin(a)) #对于列进行计算平均值
>>>
2

铺平之后‘0’所在位置就是2

除了argmin还有argmax/argmean/argmedian

3.2 cumsum函数

  • 定义:
cumsum(a, axis=None, dtype=None, out=None)   
a.cumsum(axis=None, dtype=None, out=None)
  • 返回:沿着指定轴的元素累加和所组成的数组,若不指定方向,返回一维数组
  • 参数:
    a:数组axis:轴索引,整型,若a为n维数组,则axis的取值范围为[0,n-1]
    dtype:返回结果的数据类型,若不指定,则默认与a一致。
    out:数据类型为数组。用来放置结果的替代输出数组,它必须具有与输出结果具有相同的形状和缓冲长度代码示例:

试验

import numpy as np
arr=np.array([[1,2,3],[4,5,6],[7,8,9]])
#沿着axis=0轴计算
result1=arr.cumsum(0)
print(result1)
>>>
[[ 1  2  3]
 [ 5  7  9]
 [12 15 18]]

3.3 diff函数

  • 定义
numpy.diff(a, n=1,axis=-1)

沿着指定轴计算第N维的离散差值 ,就是n位元素n+1位元素

  • 参数:
    a:输入矩阵
    n:可选,代表要执行几次差值,默认一次
    axis:默认是最后一个
    试验
import numpy as np
a= np.arange(0,12).reshape((3,4))
result=np.diff(a)
print(result)
>>>
[[1 1 1]
 [1 1 1]
 [1 1 1]]

3.4 nonzero函数

返回的是数组中,非零元素的位置。如果是二维数组就是描述非零元素在几行几列,三维数组则是描述非零元素在第几组中的第几行第几列。
试验

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 0], [6, 0, 7]])
result=np.nonzero(a)
print(result)
>>>
(array([0, 0, 0, 1, 1, 2, 2], dtype=int64), array([0, 1, 2, 0, 1, 0, 2], dtype=int64))

第一个array描述行,第二个array描述列,我们把结果转变下以便理解:
array([0, 0, 0, 1, 1, 2, 2]
array([0, 1, 2, 0, 1, 0, 2]
非零元素位置:(0,0)(0,1)(0,2)…

3.5 转置:T、transpose函数

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 0], [6, 0, 7]])
result1=a.T
result2=np.transpose(a)
print(result1)
print(result2)
>>>
[[1 4 6]
 [2 5 0]
 [3 0 7]]
[[1 4 6]
 [2 5 0]
 [3 0 7]]

3.6 sort函数

numpy.sort() 函数返回输入数组的排序副本。

  • 格式
numpy.sort(a, axis, kind, order)
  • 参数
    a: 要排序的数组
    axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
    kind: 默认为’quicksort’(快速排序)
    order: 如果数组包含字段,则是要排序的字段

试验

import numpy as np
a = np.array([[8, 2, 3], [4, 5, 2], [6, 9, 7]])
print (np.sort(a))
print (np.sort(a,axis=0))
>>>
[[2 3 8]
 [2 4 5]
 [6 7 9]]
[[4 2 2]
 [6 5 3]
 [8 9 7]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章