想开始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])