來源:和鯨社區https://www.kesci.com/home/project/59f29f67c5f3f5119527a2cc
Numpy 是 Python 做數據分析所必須要掌握的基礎庫之一。以下為入門 Numpy 的100題小練習,原為 github 上的開源項目,由和鯨社區的小科翻譯並整理(保留了部分原文作為參考)。受限於篇幅這裡只提供了部分題目的運行結果。友情提示:代碼雖好,自己動手才算學到。
1.導入numpy庫並簡寫為 np (★☆☆)(提示: import … as …)
import numpy as np
(提示: np.version, np.show_config)
print(np.__version__)
np.show_config()
(提示: np.zeros)
Z = np.zeros(10)
print(Z)
(提示: size, itemsize)
Z = np.zeros((10,10))
print("%d bytes" % (Z.size * Z.itemsize))
(提示: np.info)
numpy.info(numpy.add)
add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])
6. 創建一個長度為10並且除了第五個值為1的空向量 (★☆☆)(提示: array[4])
Z = np.zeros(10)
Z[4] = 1
print(Z)
(提示: np.arange)
Z = np.arange(10,50)
print(Z)
(提示: array[::-1])
pythonZ = np.arange(50)
Z = Z[::-1]
print(Z)
(提示: reshape)
Z = np.arange(9).reshape(3,3)
print(Z)
(提示: np.nonzero)
nz = np.nonzero([1,2,0,0,4,0])
print(nz)
(提示: np.eye)
Z = np.eye(3)
print(Z)
(提示: np.random.random)
Z = np.random.random((3,3,3))
print(Z)
(提示: min, max)
Z = np.random.random((10,10))
Zmin, Zmax = Z.min(), Z.max()
print(Zmin, Zmax)
(提示: mean)
Z = np.random.random(30)
m = Z.mean()
print(m)
(提示: array[1:-1, 1:-1])
Z = np.ones((10,10))
Z[1:-1,1:-1] = 0
print(Z)
(提示: np.pad)
Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
print(Z)
(提示: NaN = not a number, inf = infinity)
0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
0.3 == 3 * 0.1
print(0 * np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(0.3 == 3 * 0.1)
(提示: np.diag)
Z = np.diag(1+np.arange(4),k=-1)
print(Z)
(提示: array[::2])
Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
print(Z)
(提示: np.unravel_index)
print(np.unravel_index(100,(6,7,8)))
(提示: np.tile)
Z = np.tile( np.array([[0,1],[1,0]]), (4,4))
print(Z)
(提示: (x - min) / (max - min))
Z = np.random.random((5,5))
Zmax, Zmin = Z.max(), Z.min()
Z = (Z - Zmin)/(Zmax - Zmin)
print(Z)
(提示: np.dtype)
color = np.dtype([("r", np.ubyte, 1),
("g", np.ubyte, 1),
("b", np.ubyte, 1),
("a", np.ubyte, 1)])
color
(提示: np.dot | @)
Z = np.dot(np.ones((5,3)), np.ones((3,2)))
print(Z)
(提示: >, <=)
Z = np.arange(11)
Z[(3 < Z) & (Z <= 8)] *= -1
print(Z)
(提示: 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))
Z*Z2 << Z >> 2Z <- Z 1jZ 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))
(提示: np.uniform, np.copysign, np.ceil, np.abs)
Z = np.random.uniform(-10,+10,10)
print (np.copysign(np.ceil(np.abs(Z)), Z))
(提示: np.intersect1d)
Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))
(提示: 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
(提示: 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))
(提示: np.arange(dtype=datetime64['D']))
Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
print(Z)
(提示: 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))
(提示: np.arange)
Z = np.zeros((5,5))
Z += np.arange(5)
print (Z)
(提示: 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)
(提示: sort)
Z = np.random.random(10)
Z.sort()
print (Z)
(提示: np.add.reduce)
Z = np.arange(10)
np.add.reduce(Z)
(提示: np.allclose, np.array_equal)
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)
False
# 方法2
# Checking both the shape and the element values, no tolerance (values have to be exactly equal)
equal = np.array_equal(A,B)
print(equal)
False
43. 創建一個只讀數組(read-only) (★★☆)(提示: flags.writeable)
# 使用如下過程實現
Z = np.zeros(10)
Z.flags.writeable = False
Z[0] = 1
(hint: np.sqrt, np.arctan2)
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)
(提示: argmax )
Z = np.random.random(10)
Z[Z.argmax()] = 0
print (Z)
(提示: np.meshgrid)
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)
(提示: np.subtract.outer)
X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X, Y)
print(np.linalg.det(C))
(提示: np.iinfo, np.finfo, eps)
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)
(提示: np.set_printoptions)
np.set_printoptions(threshold=np.nan)
Z = np.zeros((16,16))
print (Z)
(提示: argmin)
Z = np.arange(100)
v = np.random.uniform(0,100)
index = (np.abs(Z-v)).argmin()
print (Z[index])
上面的 Numpy 題型小夥伴們都用過麼,看到陌生的語法時,記得動動自己的雙手,敲敲代碼鞏固一下!
本次只選取了其中的 50 道練習題,剩下的 50 道練習題將在下次推送發出,記得持續關注哦!