以爱与青春为名,陪你一路成长
Python是数据分析领域极受喜爱的主流程序语言。这里主要介绍Numpy
的常用用法。如果你是从事数据分析、或者人工智能等相关领域,而所用的语言又是Python的话,以下知识点都应该 “张口就来” 。建议收藏,有事没事拿出来看两遍。
在使用Numpy之前的话,我们需要先导入它:
import numpy as np
常用语句
np.asscalar() # Convert an array of size 1 to its scalar equivalent.
np.random.seed(1233)
设置随机种子,随机种子一旦固定,每次生成的数据都会固定,除非改变种子,随机数才会发生改变。
rand
生成均匀分布随机数:
# 产生2行三列均匀分布随机数组
print(np.random.rand(2,3))
randn
生成正太分布随机数:
# 三行三列正态分布随机数据
print(np.random.randn(3,3))
randint
生成指定范围内随机整数:
# (1, 100)以内5行5列随机整数
print(np.random.randint(1,100,[5,5]))
random
生成10个随机浮点数:
# (0,1)内10个随机浮点数
print(np.random.random(10))
choice
给定范围内随机选一个数:
# [0,10)内10个随机选一个数
print(np.random.choice(10))
生成正太分布数据:
mu = 1
sigma = 2
num = 10
print(np.random.normal(mu, sigma, num))
按行打乱数据:
rand_data = np.random.randint(1, 10, (3, 4))
np.random.shuffle(rand_data)
我们主要用numpy
来创建数组,或者称之为构造变量,当然自己一个一个变量敲进电脑也是可以的,用numpy的话就会方便一点。
a = np.array([1,2,3],dtype=np.int32)
dtype
是设置你创建变量的类型,你也可以选择float
类型,这都没啥问题。如果把上面的代码print
显示出来的话,如下所示:
>>>[1 2 3]
b = np.array([[1,2],[3,4],[5,6]],dtype=np.int32)
这样我们就能生成两行三列的数组,结果如下所示:
>>>[[1 2]
[3 4]
[5 6]]
arange
创建一维数组: 我们创建的数组如果比较小的话,我们可以手动输入,但是如果比较大了的话,我们手动输入就太费事了,需要调用一些函数,像arange
函数就可以很方便地创建一维数组:
c = np.arange(1,10,2)
代码所表示的意思就是,从1到10,每隔两个数字产生,输出显示出来就是:
>>>[1 3 5 7 9]
这样产生的数据类型是numpy.ndarray
,dtype是int64
。
linspace
产生等差数列:比如我们想从数字1到11产生5个数字,这些数字之间都是等间隔的:
d = np.linspace(1,11,5)
结果显示如下所示:
>>>[ 1. 3.5 6. 8.5 11. ]
这里的dtype是float64
logspace
创建等比数列:从1到10产生八个等比数列:
e = np.logspace(1,10,8)
结果显示如下所示:
>>>[1.00000000e+01 1.93069773e+02 3.72759372e+03 7.19685673e+04
1.38949549e+06 2.68269580e+07 5.17947468e+08 1.00000000e+10]
fromfunction
创建数组。该函数的第一个参数为计算数据元素的函数;第二个参数是代表数组的大小的序列,序列的每一个值代表数组对应维度的大小。
def funcA(i):
return i+i
f = np.fromfunction(funcA, (10,))
结果显示如下所示:
>>>[ 0. 2. 4. 6. 8. 10. 12. 14. 16. 18.]
如果是两维数据做运算的话,代码如下所示:
def funcB(i,j):
return i+j
g = np.fromfunction(funcB, (3,2))
结果显示如下所示:
>>>[[0. 1.]
[1. 2.]
[2. 3.]]
除了产生数组之外,我们还会经常改变数组的维度,这就要求我们查看shape
并使用reshape
函数。
shape
函数查看数组大小:实现如下所示:
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a.shape)
结果显示如下所示:
>>>(3, 2)
reshape
函数改变数组维度:实现如下所示:
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a.reshape(2,3))
结果显示如下所示:
>>>[[1 2 3]
[4 5 6]]
上面是如何生成数组,那我们如何从数组中拿元素呢?这里的操作就跟列表的操作类似了:
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][1])
结果显示如下所示:
>>> 2
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][0:])
结果显示如下所示:
>>> [1 2]
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][:-1])
结果显示如下所示:
>>> [1]
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0::2])
结果显示如下所示:
>>> [[1 2]
[5 6]]
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
b=a[:]
print('b',b)
b[2,0]=10
print('a',a)
结果显示如下所示:
>>> b [[1 2]
[3 4]
[5 6]]
a [[ 1 2]
[ 3 4]
[10 6]]
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
b=a[[2]]
print('b',b)
b[0,0]=10
print('a',a)
结果显示如下所示:
>>> b [[5 6]]
a [[1 2]
[3 4]
[5 6]]
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print('bool',a>2)
print('a>2',a[a>2])
结果显示如下所示:
>>> bool: [[False False]
[ True True]
[ True True]]
a>2: [3 4 5 6]
ufunc
的全称是universal function
,即通用处理函数。Numpy
提供的ufunc
函数大致可以划分为五类:分别为:Math operations(数学操作)、Trigonometric function(三角函数)、Bit-twiddling function(位操作)、Comparison function(比较函数)以及Floating function(浮点函数)。
a = np.array([1,2,3,4],dtype=np.int32)
b = np.array([5,6,7,8],dtype=np.float32)
print(np.add(a,b))
结果显示如下所示:
>>> [ 6. 8. 10. 12.]
a = np.array([1,2,3,4],dtype=np.int32)
b = np.array([5,6,7,8],dtype=np.float32)
print(np.subtract(a,b))
结果显示如下所示:
>>> [-4. -4. -4. -4.]
主要有np.sin
;np.cos
等,其参数并不直接代表三角函数的度数,而是使用pi
替代。
包含按位的与、或、异或、左移、右移等操作:
a = np.binary_repr(5)
b = np.binary_repr(7)
c = np.bitwise_and(5,7)
d = np.bitwise_or(5,7)
e = np.left_shift(5,2)
f = np.right_shift(5,2)
print('a:{}, b:{}, c:{}, d:{}, e:{}, f:{}'.format(a,b,c,d,e,f))
结果显示如下所示:
>>> a:101, b:111, c:5, d:7, e:20, f:1
包含了数值比较、逻辑运算、取最大值、取最小值等操作。
1. 比大小greater
函数:
a = np.array([1,5])
b = np.array([0,10])
print(np.greater(a, b))
结果显示如下所示:
>>> [ True False]
2. 比相等equal
函数:
a = np.array([0,5])
b = np.array([0,10])
print(np.equal(a, b))
结果显示如下所示:
>>> [ True False]
3. 逻辑判断logical_and
函数:
x = np.arange(1,5)
print(np.logical_and(x>1, x<3))
结果显示如下所示:
>>> [False True False False]
4. 浮点函数:
包含了类型判别、是否是最大值、向上取整等操作
a . 如果具有非零虚部,则比较复杂:
x = [3+1j, 6+0j, 7.5, 6, 2j]
print(np.iscomplex(x))
结果显示如下所示:
>>> [ True False False False True]
b. 判断是否是无穷大:
print(np.isinf(np.inf))
结果:
>>> [ True False False False True]
c. 向正无穷取整:
x = [2.1, -2.1, 3.54, 7.2, -7.2]
print(np.ceil(x))
结果:
>>> [ 3. -2. 4. 8. -7.]
d. 取下界:
x = [2., -3., 3., 7., -8.]
print(np.floor(x))
结果:
>>> [ 2. -3. 3. 7. -8.]
Numpy
提供一些文件存取操作,方便将ndarray
数组元素存储到文件以及从文件读取数据来初始化数组。其中tofile
、fromfile
以二进制形式的方式存取;save
、load
函数以Numpy的专有格式存取;savez
可以保存多个数组到同一个文件,并可以通过load
循环取出。tofile
,fomfile
示例如下:
tofile
和fromfile
示例:x = np.array([2.1, -2.1, 3.54, 7.2, -7.2])
x.tofile('a.bin')
y = np.fromfile('a.bin',dtype=np.float64)
print(y)
结果:
>>> [ 2.1 -2.1 3.54 7.2 -7.2 ]
save
和load
示意:x = np.array([2.1, -2.1, 3.54, 7.2, -7.2])
x.tofile('a.bin')
y = np.fromfile('a.bin',dtype=np.float64)
print(y)
结果:
>>> [ 2.1 -2.1 3.54 7.2 -7.2 ]
savez
、load
示例:a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3])
c = np.array([1.2,3.1,3.3])
np.savez('data.npz',a,b,c)
arr = np.load('data.npz')
print('arr_0',arr['arr_0'])
print('arr_1',arr['arr_1'])
print('arr_2',arr['arr_2'])
结果:
>>> arr_0 [[1 2 3]
[4 5 6]]
arr_1 [1 2 3]
arr_2 [1.2 3.1 3.3]
注意:无需备注出身(英雄不问出处),打广告的就不要来了,我自己都不在群里推送自己的公众号文章,抱拳了!加作者微信:MultiAgent1024-(注意后面有小-),拉你进群。
▲扫码关注我们