21. 用tile函数去创建一个 8x8的棋盘样式矩阵(★☆☆)

(提示: np.tile)

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

22. 对一个5x5的随机矩阵做归一化(★☆☆)

(提示: (x - min) / (max - min))

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

23. 创建一个将颜色描述为(RGBA)四个无符号字节的自定义dtype?(★☆☆)

(提示: np.dtype)

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

24. 一个5x3的矩阵与一个3x2的矩阵相乘,实矩阵乘积是什么?(★☆☆)

(提示: np.dot | @)

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

25. 给定一个一维数组,对其在3到8之间的所有元素取反 (★☆☆)

(提示: >, <=)

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

26. 下面脚本运行后的结果是什么? (★☆☆)

(提示: np.sum)

print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))

print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))

27. 考虑一个整数向量Z,下列表达合法的是哪个? (★☆☆)

Z**Z
2 << Z >> 2
Z <- Z 1j*Z Z/1/1 Z
Z

Z = np.arange(5)
Z ** Z  # legal

array([  1,   1,   4,  27, 256])

Z = np.arange(5)
2 << Z >> 2  # false

array([0, 1, 2, 4, 8])

Z = np.arange(5)
Z <- Z   # legal

array([False, False, False, False, False])

Z = np.arange(5)
1j*Z   # legal

array([0.+0.j, 0.+1.j, 0.+2.j, 0.+3.j, 0.+4.j])

Z = np.arange(5)
Z/1/1   # legal

array([0., 1., 2., 3., 4.])

Z = np.arange(5)
Z<Z>Z    # false

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

28. 下列表达式的结果分别是什么?(★☆☆)

np.array(0) / np.array(0)
np.array(0) // np.array(0)
np.array([np.nan]).astype(int).astype(float)

print(np.array(0) / np.array(0))
print(np.array(0) // np.array(0))
print(np.array([np.nan]).astype(int).astype(float))

29. 如何从零位对浮点数组做舍入 ? (★☆☆)

(提示: np.uniform, np.copysign, np.ceil, np.abs)

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

30. 如何找到两个数组中的共同元素? (★☆☆)

(提示: np.intersect1d)

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

31. 如何忽略所有的 numpy 警告(尽管不建议这么做)? (★☆☆)

(提示: np.seterr, np.errstate)

# Suicide mode on
defaults = np.seterr(all="ignore")
Z = np.ones(1) / 0

# Back to sanity
_ = np.seterr(**defaults)

An equivalent way, with a context manager:

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

32. 下面的表达式是正确的吗? (★☆☆)

(提示: imaginary number)

np.sqrt(-1) == np.emath.sqrt(-1)

np.sqrt(-1) == np.emath.sqrt(-1)  

False

33. 如何得到昨天,今天,明天的日期? (★☆☆)

(提示: np.datetime64, np.timedelta64)

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))

34. 如何得到所有与2016年7月对应的日期?(★★☆)

(提示: np.arange(dtype=datetime64['D']))

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

35. 如何直接在位计算(A+B)*(-A/2)(不建立副本)? (★★☆)

(提示: np.add(out=), np.negative(out=), np.multiply(out=), np.divide(out=))

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)

array([-1.5, -1.5, -1.5])

36. 用五种不同的方法去提取一个随机数组的整数部分(★★☆)

(提示: %, np.floor, np.ceil, astype, np.trunc)

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))

37. 创建一个5x5的矩阵,其中每行的数值范围从0到4 (★★☆)

(提示: np.arange)

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

38. 通过考虑一个可生成10个整数的函数,来构建一个数组(★☆☆)

(提示: np.fromiter)

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

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

39. 创建一个长度为10的随机向量,其值域范围从0到1,但是不包括0和1 (★★☆)

(提示: np.linspace)

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

40. 创建一个长度为10的随机向量,并将其排序 (★★☆)

(提示: sort)

Z = np.random.random(10)
Z.sort()
print (Z)