Python_Numpy100题下
参考: https://github.com/rougier/numpy-100
1.导入名为np的numpy包(★☆☆)
import numpy as np
2.打印numpy版本和配置(★☆☆)
print(np.__version__)
np.show_config()
3.创建大小为10的空向量(★☆☆)
temp = np.zeros(10)
print(temp)
4.如何找到任意数组的内存大小(★☆☆)
Z = np.zeros((10,10))
print(Z.size)
print(Z.itemsize)
print("%d bytes" % (Z.size * Z.itemsize))
5.如何从命令行 获取numpy add函数的文档(★☆☆)¶
np.info(np.add)
6.创建一个大小为10但第五个值为1的空向量(★☆☆)
temp = np.zeros(10)
temp[5] = 1
print(temp)
7.创建一个值介于10到49之间的向量(★☆☆)
temp = np.arange(10,50)
print(temp)
8.反转向量(第一个元素变为最后一个)(★☆☆)
temp = np.arange(10,50)
temp = temp[::-1]
print(temp)
9.创建一个3x3矩阵,其值范围为0到8(★☆☆)
#法一:
#temp = np.arange(9)
#temp = temp.reshape(3,3)
#print(temp)
#法二:
temp = np.arange(9).reshape(3,3)
print(temp)
10.从[1,2,0,0,4,0]中找出非零元素的指数(★☆☆)
temp = np.nonzero([1,2,0,0,4,0])
print(temp)
11.创建3x3单位矩阵(★☆☆)
temp = np.eye(3,3)
print(temp)
12.创建具有随机值的3x3x3数组(★☆☆)
temp = np.random.random((3,3,3))
print(temp)
13.创建一个带有随机值的10x10数组,并找到最小值和最大值(★☆☆)
temp = np.random.random((10,10))
print(temp)
max=np.max(temp)
min=np.min(temp)
print(max,min)
14.创建一个大小为30的随机向量,并找到平均值(★☆☆)
temp = np.random.random(30)
print(temp)
avg0=np.average(temp)#可算加权
avg1=np.mean(temp)
print(avg0,avg1)
15.创建一个二维数组,边框上为1,内部为0(★☆☆)
temp = np.ones((10,10))
temp[1:-1, 1:-1] = 0
print(temp)
16.如何在现有数组周围添加边框(用0填充)(★☆☆)
Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
print(Z)
# Using fancy indexing
Z[:, [0, -1]] = 0
Z[[0, -1], :] = 0
print(Z)
17.下列表达式的结果是什么(★☆☆)
print(0 * np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(np.nan in set([np.nan]))
print(0.3 == 3 * 0.1)
18.创建一个5x5矩阵,其值在对角线下方1、2、3、4(★☆☆)
Z = np.diag(1+np.arange(4),k=-1)
print(Z)
19.创建一个8x8矩阵并用棋盘格填充(★☆☆)
Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1#从第一行,到最后一行,中间间隔两行;中间间隔两列
Z[::2,1::2] = 1
print(Z)
20.考虑一个(6,7,8)形状数组,第100个元素的索引(x,y,z)是多少(★☆☆)
print(np.unravel_index(99,(6,7,8)))
21.使用tile函数创建棋盘8x8矩阵(★☆☆)
temp = np.array([[0,1],[1,0]])
print(temp)
Z = np.tile(temp, (4,4))#将数组沿着X轴Y轴都扩大4倍
print(Z)
22.归一化5x5随机矩阵(★☆☆)
temp = np.random.random((5,5))
print(temp)
#np.std():计算全局标准差
Z = (temp-np.mean(temp))/np.std(temp)
print(Z)
23.创建一个自定义数据类型,将颜色描述为四个无符号字节(RGBA)(★☆☆)
color = np.dtype([("r", np.ubyte),
("g", np.ubyte),
("b", np.ubyte),
("a", np.ubyte)])
print(color)
24.将5x3矩阵乘以3x2矩阵(实矩阵积)(★☆☆)
print(np.dot(np.random.random((5,3)),np.random.random((3,2))))
print(np.ones((5,3)) @ np.ones((3,2)))
25.给定一个1D数组,求3到8之间的所有元素的反(★☆☆)
# Author: Evgeni Burovski
Z = np.arange(11)
Z[(3 < Z) & (Z < 8)] *= -1
print(Z)
26.以下脚本的输出是什么(★☆☆)
import numpy as np
# Author: Jake VanderPlas
#后面-1,代表求和后减1
print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))
27.考虑一个整数向量Z,以下哪一个表达式是合法的(★☆☆)
#未打印的不能输出
Z = np.random.random(5)
print(Z**Z)
#2 << Z >> 2
print(Z <- Z)
print(1j*Z)
print(Z/1/1)
#ZZ
28.下列表达式的结果是什么(★☆☆)
print(np.array(0) / np.array(0))
print(np.array(0) // np.array(0))
print(np.array([np.nan]).astype(int).astype(float))
29.如何将浮点数组从零取整(★☆☆)
# Author: Charles R Harris
Z = np.random.uniform(-10,+10,10)
print(Z)
print(np.copysign(np.ceil(np.abs(Z)), Z))
# More readable but less efficient
print(np.where(Z>0, np.ceil(Z), np.floor(Z)))
30.如何在两个数组之间找到公共值(★☆☆)
Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(Z1,Z2)
print(np.intersect1d(Z1,Z2))
31.如何忽略所有numpy警告(不推荐)(★☆☆)
# Suicide mode on
defaults = np.seterr(all="ignore")
Z = np.ones(1) / 0
# Back to sanity
_ = np.seterr(**defaults)
# Equivalently with a context manager
with np.errstate(all="ignore"):
np.arange(3) / 0
32. Is the following expressions true? (★☆☆)
print(np.sqrt(-1) == np.emath.sqrt(-1))
33.昨天、今天和明天的日期怎么算(★☆☆)
yesterday = np.datetime64('today') - np.timedelta64(1)
today = np.datetime64('today')
tomorrow = np.datetime64('today') + np.timedelta64(1)
print(yesterday,today,tomorrow)
34.如何获取2016年7月对应的所有日期(★★☆)
Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
print(Z)
35.如何计算((A+B)*(-A/2))到位(无拷贝)(★★☆)
A = np.ones(3)*1
B = np.ones(3)*2
print(A,B)
np.add(A,B,out=B)
print(A,B)
np.divide(A,2,out=A)
print(A,B)
np.negative(A,out=A)
print(A,B)
np.multiply(A,B,out=A)
print(A,B)
36.使用4种不同的方法提取正数随机数组的整数部分(★★☆)
Z = np.random.uniform(0,10,10)
print(Z - Z%1)
print(Z // 1)
print(np.floor(Z))
print(Z.astype(int))
print(np.trunc(Z))
37.创建一个5x5矩阵,行值从0到4(★★☆)
Z = np.zeros((5,5))
Z += np.arange(5)#对行操作
print(Z)
# without broadcasting
Z = np.tile(np.arange(0, 5), (5,1))
print(Z)
38.考虑一个生成10个整数的生成器函数,并用它来构建一个数组(★☆☆)
def generate():
for x in range(10):
yield x
Z = np.fromiter(generate(),dtype=float,count=-1)
print(Z)
39.创建一个大小为10的向量,其值范围为0到1,两者都排除在外(★★☆)
#创建11个数,但是截取后10个数
Z = np.linspace(0,1,11,endpoint=False)[1:]
print(Z)
40.创建一个大小为10的随机向量并对其排序(★★☆)
temp = np.random.random(10)
print(temp)
temp = np.sort(temp)
print(temp)
41.如何比np.sum更快地求一个小数组的和(★★☆)
# Author: Evgeni Burovski
Z = np.arange(10)
np.add.reduce(Z)
print(Z)
42.考虑两个随机数组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)
# Checking both the shape and the element values, no tolerance (values have to be exactly equal)
equal = np.array_equal(A,B)
print(equal)
43.使数组不可变(只读)(★★☆)
Z = np.zeros(10)
Z.flags.writeable = False
Z[0] = 1
44.考虑一个表示笛卡尔坐标的随机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)
45.创建大小为10的随机向量,并将最大值替换为0(★★☆)
Z = np.random.random(10)
print(Z)
Z[Z.argmax()] = 0
print(Z)
46.创建一个结构数组,x和y坐标覆盖[0,1]x[0,1]区域(★★☆)
Z = np.zeros((5,5), [('x',float),('y',float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,5),
np.linspace(0,1,5))
print(Z)
47、给定两个阵列,x和y,构造柯西矩阵C(CIJ=1/(XI-YJ))★★☆)
# Author: Evgeni Burovski
X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X, Y)
print(np.linalg.det(C))
48.打印每个numpy标量类型的最小和最大可表示值(★★☆)
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=float("inf"))
Z = np.zeros((40,40))
print(Z)
50.如何在向量中找到最接近的值(到给定的标量)(★★☆)
Z = np.arange(100)
v = np.random.uniform(0,100)
index = (np.abs(Z-v)).argmin()
print(Z[index])