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