您的位置:首页 > 编程语言 > Python开发

100 numpy exercises 前50

2016-08-06 20:40 162 查看
想开始deeplearn的课程,但是提示需要先熟悉numpy和theano的使用。没办法,看完numpy的文档的基础部分就开始对着github上的题目打,虽然很多没经过过多的思考,但是算最快入门的了,很多东西打着打着就熟了。

github源地址 https://github.com/rougier/numpy-100/blob/master/100%20Numpy%20exercises.md

1.导入numpy包,别名为np

import numpy as np


2.打印numpy的版本号和配置项

print(np.__version__)
np.show_config()


3.新建一个大小为10的空向量

z = np.zeros(10)


4.返回数组的内存空间大小

z = np.zeros((10, 10))
print(z.size * z.itemsize)


5.获取add函数的文档

np.info(np.add)


6.新建一个大小为10的空向量,第五个值为1

z = np.zeros(10)
z[4] = 1


7.新建一个范围为(10,49)的向量

z = np.arange(10, 50)


8.输出一个向量的逆序

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


9.新建一个3*3的矩阵,范围为0到8

z = np.arange(9).reshape(3, 3)


10.从[1, 2, 0, 0, 4, 0]中找到非0的下标

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


11.新建一个3*3的单位矩阵

z = np.eye(3)


12.新建一个3*3*3的随机值

z = np.random.random((3, 3, 3))


13.新建一个10*10的随机矩阵,找到最大值和最小值

z = np.random.random((10, 10))
zmin, zmax = z.min(), z.max()


14.新建一个大小为30的随机向量,找到平均值

z = np.random.random(30)
zmean = z.mean()


15.新建一个二维矩阵,边界为1,中心为0

z = np.zeros((10, 10))
z[0, :], z[-1, :] = 1, 1
z[:, 0], z[:, -1] = 1, 1


16.在已知数组四周新加值为0的边

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


17.求下列运算的结果

0 * np.nan # nam
np.nan == np.nan #False
np.inf > np.nan #False
np.nan - np.nan #nan
0.3 == 3 * 0.1 #False


18.新建一个5*5的矩阵,[1, 2, 3, 4]在对角线的下面

z = np.diag(np.arange(1,5), k=-1)


19.新建一个8*8的矩阵的西洋棋盘

z = np.zeros((8, 8))
z[::2, ::2], z[1:;2, 1::2] = 1, 1


20.对于一个(6, 7, 8)的数组,第100个元素下表

np.unrevel_index(100, (6,7,8))


21.用tile函数新建一个8*8棋盘

z = np.tile(np.array([1,0], [0,1]), (4, 4))


22.归一化5*5的随机矩阵

z = np.random.random((5,5))
zmax, zmin = z.max(), z.min()
z = (z - zmin)/(zmax - zmin)


23.新建一个dtype类型用来描述一个颜色(RGBA)

color = np.dtype([("r", np.ubyte, 1),("g", np.ubyte, 1),("b", np.byte,1),
("a", np.ubyte, 1)])


24.矩阵5*3点乘矩阵3*2

z = np.dot(np.ones((5,3)), np.ones((3,2)))


25.给定一个一维数组,3和8内的取负数

z = np.arange(10)
z[(Z >= 3) & (Z <=8)] *= -1


26.下列式子的输出

sum(range(5), -1) #9 = 10 - 1
np.sum(range(5), -1) #10, -1是维度


27.下列的表达式哪个合法

z**z
2 << z >> 2
z < -z
1j*z
z/1/1
z < z > z # error


28.下列表达式的结果

np.array(0) / np.array(0) #warning, nan
np.array(0) // np.array(0) #warning, 0
np.array([np.nan]).astype(int).astype(float) # array([-2.14748365e+09])


29.向远离0取整

z = np.random.uniform(-10, 10, 10) #生成-10到10的10个数
np.trunc(z + np.copysign(0.5, z)) #copysign函数往前面参数赋值符号,trunc向0取整


30.两数组找共同值

z1 = np.random.randint(0, 10, 10)
z2 = np.random.randint(0, 10, 10)
np.intersect1d(z1, z2)


31.屏蔽numpy的警告

defaults = np.seterr(all="ignore")
z = np.ones(1)/0

_ = np.seterr(**defaults)


32.下列表达式对吗

np.sqrt(-1) == np.emath.sqrt(-1) #Warning, Flase


33.怎样获得昨天,今天和明天

yesterday = np.datetime64('today', 'D) - np.timedelta(1, 'D') # D是day
today = np.datetime64('today', 'D')
tomorrow = np.datetime64('today', 'D') + np.timedelta(1, 'D')


34.获得20167月的月份

z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')


35.怎样在没有额外内存计算 ((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)


36.用5种方法取整

z = np.random.uniform(0, 10, 10)

z - z%1
np.floor(z)
np.ceil(z) - 1 #ceil大于或等于的整数
z.astype(int)
np.trunc(z) #靠近0方向


37.新建一个5*5矩阵,横向从0到4

z = np.tile([0,1,2,3,4], (5,1))


38.考虑一个生成器能生成10个整数,而且用它构建一个数组

def generate() :
for x in range(10) :
yield x #迭代器
# fromiter函数,生成1维数组,count=-1默认送生成器读取所有
z = np.fromiter(generate(), dtype=float, count=-1)


39.新建一个大小为10的向量值的范围为0到1,排除头尾

z = np.linspace(0, 1, 12, endpoint=True)[1:-1]


40.新建一个大小为10的随机向量并且排序

z = np.random.random(10)
z.sort()


41.怎样为一个小数组求和,速度比np.sum快

z = np.arange(10)
np.add.reduce(z) #reduce函数能降一维


42.考虑两个数组,看他们是否相等

a = np.random.randint(0, 2, 5)
b = np.random.randint(0, 2, 5)
equal = np.allclose(a, b)


43.新建一个只读数组

z = np.zeros(10)
z.flags.writeable = False
z[0] = 1 # error


44.把一个10*2的笛卡尔坐标转换成极坐标

z = np.random.random((10, 2))
x, y = z[:, 0], z[:, 1]
r = np.sqrt(x**2 + y**2)
t = np.arctan2(y, x)


45.新建一个大小为10的向量,最大值用0代替

z = np.random.random(10)
z[z.argmax()] = 0


46.新建一个用x和y坐标表示覆盖[1,0]*[0,1]区域的网格

z = np.zeros((5,5), ['x', float), ('y', float)])
# x方向0到1, y方向0到1,x和y组成网格
z['x'], z['y'] = np.meshgrid(np.linspace(0,1,5), np.linspace(0,1,5))


47.给定两个数组,构造柯西矩阵 Cij=1/(xi-yi)

x = np.arange(8)
y = x + 0.5
c = 1.0 / np.subtract.outer(x, y) # outer: y=x-y
print(np.linalg.dect(c)) #.dec: 计算行列式


48.打印

for dtype in [np.int8, np.int32, np.int64]:
print(np.iinfo(dtype).min)
print(np.iinfo(dtype).max)
for dtype in [np.float32, np.float64]:
print(np.finfo(dtype).min)
print(np.finfo(dtype).max)
print(np.finfo(dtype).eps)


49.怎样输出一个数组的所有值

np.set_printoptions(threshold=np.nan)
z = np.zeros((16, 16))


50.怎样找到一个数组和给定点最近的值

z = np.arange(100)
v = np.random.uniform(0, 100)
index = (np.abs(z-v).argmin())
print(z[index])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy