Numpy笔记(1)

Numpy学习

1、导入numpy库并简写为 np

import numpy as np

2、打印numpy的版本和配置说明

print(np.__version__)
np.show_config()

3、找到任何一个数组的内存大小

Z = np.zeros((10,10))
print("%d bytes" % (Z.size * Z.itemsize))

4、从命令行得到numpy中add函数的说明文档

numpy.info(numpy.add)

5、创建一个值域范围从10到49的向量

Z = np.arange(10,50)
print(Z)

6、反转一个向量(第一个元素变为最后一个)

Z = np.arange(50)
Z = Z[::-1]
print(Z)

7、找到数组[1,2,0,0,4,0]中非0元素的位置索引

nz = np.nonzero([1,2,0,0,4,0])
print(nz)

8、创建一个 3x3x3的随机数组

Z = np.random.random((3,3,3))
print(Z)

9、创建一个 10x10 的随机数组并找到它的最大值和最小值

Z = np.random.random((10,10))
Zmin, Zmax = Z.min(), Z.max()
print(Zmin, Zmax)

10、创建一个长度为30的随机向量并找到它的平均值

Z = np.random.random(30)
m = Z.mean()
print(m)

11、创建一个二维数组,其中边界值为1,其余值为0

Z = np.ones((10,10))
Z[1:-1,1:-1] = 0
print(Z)

12、对于一个存在的数组,添加一个用0填充的边界

Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
 print(Z)

13、表达式运行的结果

print(0 * np.nan)
'''
nan
'''

print(np.nan == np.nan)
'''
False
'''

print(np.inf > np.nan)
'''
False
'''

print(np.nan - np.nan)
'''
nan
'''

print(0.3 == 3 * 0.1)
'''
False
'''

14、创建一个 5x5的矩阵,并设置值1,2,3,4落在其对角线下方位置

Z = np.diag(1+np.arange(4),k=-1)
print(Z)

15、创建一个8x8 的矩阵,并且设置成棋盘样式

Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
print(Z)

16、求数组中某个元素的索引

print(np.unravel_index(100,(6,7,8)))
'''
[[0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]]
'''

17、用tile函数去创建一个 8x8的棋盘样式矩阵

Z = np.tile( np.array([[0,1],[1,0]]), (4,4))
print(Z)
'''
[[0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]]
'''

18、对一个5x5的随机矩阵做归一化

Z = np.random.random((5,5))
Zmax, Zmin = Z.max(), Z.min()
Z = (Z - Zmin)/(Zmax - Zmin)
print(Z)

19、一个5x3的矩阵与一个3x2的矩阵相乘,实矩阵乘积

Z = np.dot(np.ones((5,3)), np.ones((3,2)))
print(Z)
'''
[[3. 3.]
 [3. 3.]
 [3. 3.]
 [3. 3.]
 [3. 3.]]
'''

20、给定一个一维数组,对其在3到8之间的所有元素取反

Z = np.arange(11)
Z[(3 < Z) & (Z <= 8)] *= -1
print(Z)

21、从零位对浮点数组做舍入

Z = np.random.uniform(-10,+10,10)
print (np.copysign(np.ceil(np.abs(Z)), Z))

22、找到两个数组中的共同元素

Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))

23、忽略所有的 numpy 警告(尽管不建议这么做)

with np.errstate(divide='ignore'):  
    Z = np.ones(1) / 0

24、如何得到昨天,今天,明天的日期

yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today     = np.datetime64('today', 'D')
tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print ("Yesterday is " + str(yesterday))
print ("Today is " + str(today))
print ("Tomorrow is "+ str(tomorrow))

25、如何得到所有与2016年7月对应的日期

Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
print(Z)
'''
['2016-07-01' '2016-07-02' '2016-07-03' '2016-07-04' '2016-07-05'
 '2016-07-06' '2016-07-07' '2016-07-08' '2016-07-09' '2016-07-10'
 '2016-07-11' '2016-07-12' '2016-07-13' '2016-07-14' '2016-07-15'
 '2016-07-16' '2016-07-17' '2016-07-18' '2016-07-19' '2016-07-20'
 '2016-07-21' '2016-07-22' '2016-07-23' '2016-07-24' '2016-07-25'
 '2016-07-26' '2016-07-27' '2016-07-28' '2016-07-29' '2016-07-30'
 '2016-07-31']
'''

26、直接在位计算(A+B)*(-A/2)(不建立副本)

A = np.ones(3)*1
B = np.ones(3)*2
C = np.ones(3)*3
np.add(A,B,out=B)

np.divide(A,2,out=A)

np.negative(A,out=A)

np.multiply(A,B,out=A)

27、 用五种不同的方法去提取一个随机数组的整数部分

Z = np.random.uniform(0,10,10)
print (Z - Z%1)

print (np.floor(Z))

print (np.ceil(Z)-1)

print (Z.astype(int))

print (np.trunc(Z))

28、 创建一个5x5的矩阵,其中每行的数值范围从0到4

Z = np.zeros((5,5))
Z += np.arange(5)
print (Z)

29、通过考虑一个可生成10个整数的函数,来构建一个数组

def generate():
     for x in range(10):
        yield x
Z = np.fromiter(generate(),dtype=float,count=-1)
print (Z)

30、创建一个长度为10的随机向量,其值域范围从0到1,但是不包括0和1

Z = np.linspace(0,1,11,endpoint=False)[1:]
print (Z)

31、对于一个小数组,如何用比 np.sum更快的方式对其求和

Z = np.arange(10)
np.add.reduce(Z)

32、对于两个随机数组A和B,检查它们是否相等

A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
# Assuming identical shape of the arrays and a tolerance for the comparison of values
equal = np.allclose(A,B)
print(equal)

# 方法2
# Checking both the shape and the element values, no tolerance (values have to be exactly equal)
equal = np.array_equal(A,B)
print(equal)

33、创建一个只读数组(read-only)

# 使用如下过程实现  
Z = np.zeros(10)  
Z.flags.writeable = False  
Z[0] = 1  

34、将笛卡尔坐标下的一个10x2的矩阵转换为极坐标形式

Z = np.random.random((10,2))
X,Y = Z[:,0], Z[:,1]
R = np.sqrt(X**2+Y**2)
T = np.arctan2(Y,X)
print (R)
print (T)

35、给定标量时,如何找到数组中最接近标量的值

Z = np.arange(100)
v = np.random.uniform(0,100)
index = (np.abs(Z-v)).argmin()
print (Z[index])

36、减去一个矩阵中的每一行的平均值

X = np.random.rand(5, 10)
# Recent versions of numpy
Y = X - X.mean(axis=1, keepdims=True)
print(Y)

# 方法2
# Older versions of numpy
Y = X - X.mean(axis=1).reshape(-1, 1)
print (Y)

37、如何通过第n列对一个数组进行排序

Z = np.random.randint(0,10,(3,3))
print (Z)
print (Z[Z[:,1].argsort()])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值