Numpy練習題


以下摘錄一些numpy的練習題。答案僅供參考,並不是唯一的。因為完成題目可以用很多種不同的方法,因此只要你自己的方法能夠完成任務即可。

 

1、如何創建從0到9的一維數組?

結果:

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

 

答案:

array=np.arange(10)

 

2. 如何創建一個3*3的二維數組,值全為True(真)?

結果:

[[ True  True  True]
 [ True  True  True]
 [ True  True  True]]

 

答案:

array=np.full((3,3),True)

or

array=np.ones((3,3),dtype=bool)

 

3. 如何創建一個3×3的二維數組,值域為0到8

結果:

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

 

答案:

array=np.arange(9).reshape(3,3)

 

4. 如何從數組np.array([1, 2, 0, 0, 4, 0])中找出非0元素的位置索引

結果:

array([0, 1, 4]

 

答案:

array=np.array([1, 2, 0, 0, 4, 0])
index=np.where(array!=0)

 

5. 如何從數組np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])中提取所有的奇數?

結果:

[1 3 5 7 9]

 

答案:

array=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
odd_nums=array[array%2!=0]

 

6. 如何將數組np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])中的所有奇數替換為-1?

結果:

[ 0 -1  2 -1  4 -1  6 -1  8 -1]

 

答案:

array=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array[array%2!=0]=-1

 

7. 如何將數np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])中的所奇數替換為-1,而不改變原數組?

結果:

original array: [0 1 2 3 4 5 6 7 8 9]
changed array: [ 0 -1  2 -1  4 -1  6 -1  8 -1]

 

答案:

array=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr=np.where(array%2!=0,-1,array)

 

8. 如何將一維數組np.arange(10)轉換為2行的二維數組?

結果:

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

 

答案:

array=np.arange(10).reshape((2,-1))

注:列設置為-1表示自動轉換成相應的列數

 

9. 如何將數組a = np.arange(10).reshape(2,-1)和數組b = np.repeat(1, 10).reshape(2,-1)垂直堆疊?

結果:

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

 

答案:

a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
array=np.vstack((a,b))

or

a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
array=np.concatenate((a,b),axis=0)

 

10. 如何將數組a = np.arange(10).reshape(2,-1)和數組b = np.repeat(1, 10).reshape(2,-1)水平堆疊?

結果:

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

 

答案:

a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
array=np.hstack((a,b))

or

a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
array=np.concatenate((a,b),axis=1)

 

11. 如何獲取數組a = np.array([1,2,3,2,3,4,3,4,5,6])和數組b = np.array([7,2,10,2,7,4,9,4,9,8])元素相匹配的位置?

結果:

array([1, 3, 5, 7]

 

答案:

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
location=np.where(a==b)

 

12. 如何從數組np.arange(15)中提取5到10之間的所有數字?

結果:

[ 5  6  7  8  9 10]

 

答案:

array=np.arange(15)
nums=array[(array>=5) & (array<=10)]

or

array=np.arange(15)
index=np.where((array>=5) & (array<=10))
nums=array[index]

 

13. 如何交換數組np.arange(9).reshape(3,3)中的第1列和第2列?

結果:

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

 

答案:

array=np.arange(9).reshape(3,3)
array=array[:,[1,0,2]]

 

14. 如何交換數組np.arange(9).reshape(3,3)中的第1行和第2行?

結果:

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

 

答案:

array=np.arange(9).reshape(3,3)
array=array[[1,0,2],:]

 

15. 如何創建一個形狀為5x3的二維數組,其包含5到10之間的隨機浮點數?

結果:

[[9.71536206 5.48559036 6.16270046]
 [9.80558974 7.99453137 6.08687276]
 [9.36538995 7.68606063 8.13776235]
 [9.8819585  9.37235799 7.8899307 ]
 [9.65236084 8.48604657 7.08038605]]

 

答案:

array=np.random.rand(5,3)+np.random.randint(low=5,high=10,size=(5,3))

 

16. 如何獲取數組a = np.array([1,2,3,2,3,4,3,4,5,6])和數組b = np.array([7,2,10,2,7,4,9,4,9,8])之間的共同元素?

結果:

[2 4]

 

答案:

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
index=np.isin(a,b)
elements=np.unique(a[index])

or

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
elements=np.intersect1d(a,b)

 

17. 如何從數組a = np.array([1,2,3,2,3,4,3,4,5,6])中刪除在數組b = np.array([7,2,10,2,7,4,9,4,9,8])中存在的所有元素?

結果:

[1 3 3 3 5 6]

 

答案:

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
index=np.isin(a,b)
array=a[~index]

 

 

18. 如何反轉二維數組np.arange(9).reshape(3,3)的行?

結果:

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

 

答案:

array=np.arange(9).reshape(3,3)
array=array[::-1,:]

 

19. 如何反轉二維數組np.arange(9).reshape(3,3)的列?

結果:

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

 

答案:

array=np.arange(9).reshape(3,3)
array=array[:,::-1]

 

20. 如何把數組np.arange(15)的隨機位換成值44?

結果:

[ 0  1  2  3  4  5  6  7 44  9 10 11 12 13 14]

 

答案:

array=np.arange(15)
np.random.seed(100)
array[np.random.choice(len(array))]=44

 

21. 如何查找數組np.array([1,2,3,2,3,4,3,4,5,6])中的唯一值的數量

結果:

(array([1, 2, 3, 4, 5, 6]), array([1, 2, 3, 2, 1, 1], dtype=int64))

 

答案:

array=np.array([1,2,3,2,3,4,3,4,5,6])
counts=np.unique(array,return_counts=True)

 

22. 如何找到二維數組np.arange(9).reshape(3,3)每一行中的最大值

結果:

[6 7 8]

 

答案:

array=np.arange(9).reshape(3,3)
max_num=np.max(array,axis=0)

 

23. 如何計算數組a = np.array([1,2,3,2,3,4,3,4,5,6])和數組b = np.array([7,2,10,2,7,4,9,4,9,8])之間的歐式距離?

結果:

12.529964086141668

 

答案:

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
distance=np.sqrt(np.sum((a-b)**2))

 

24. 給出起點2,長度10和步長3,如何創建一個numpy數組

結果:

[ 2  5  8 11 14 17 20 23 26 29]

 

答案:

array=np.arange(2,3*10+2,3)

 

25. 如何從二維數組a_2d = np.array([[3,3,3],[4,4,4],[5,5,5]])中的每行減去一維數組b_1d = np.array([1,2,3])中相應的值

結果:

[[2 2 2]
 [2 2 2]
 [2 2 2]]

 

答案:

a_2d = np.array([[3,3,3],[4,4,4],[5,5,5]])
b_1d = np.array([1,2,3])
array=a_2d-b_1d[:,np.newaxis]

 

26. 如何知道數組np.array([1,2,3,2,3,4,3,4,5,6])有沒有NaN值?

結果:

False

 

答案:

array=np.array([1,2,3,2,3,4,3,4,5,6])
is_na=np.isnan(array).any()

 

27. 如何把數組中的NaN值替換成0?

結果:

[1. 2. 3. 2. 0. 4. 3. 4. 5. 6.]

 

答案:

array=np.array([1,2,3,2,np.nan,4,3,4,5,6])
array[np.isnan(array)]=0

 

28. 如何知道數組np.array([7,2,10,2,7,4,9,4,9,8])中的第二大值是多少?

結果:

9

 

答案:

array=np.array([7,2,10,2,7,4,9,4,9,8])
num=np.unique(array)[-2]

 

29. 如何把數組np.random.randint(1,10(3,3))按照數組最后一列的數值進行排序?

結果:

[[8 6 2]
 [3 8 8]
 [9 8 9]]

 

答案:

np.random.seed(4)
array=np.random.randint(1,10,(3,3))
order=np.argsort(array[:,-1])
array=array[order,:]

 

30. 如何知道數組np.array([7,2,10,2,7,2,4,9,4,9,8])中出現頻率最高的值是什么?

結果:

2

 

答案:

array=np.array([7,2,10,2,7,2,4,9,4,9,8])
most_frequent=np.unique(array,return_counts=True)[0][0]

 

31. 如何找出數組np.array([1, 2, 1, 1, 3, 4, 3, 1, 1, 2, 1, 1, 2])中第五個1出現的位置?

結果:

8

 

答案:

array=np.array([1, 2, 1, 1, 3, 4, 3, 1, 1, 2, 1, 1, 2])
loc=np.argsort(array)[4]

 

32. 如何創建一個5*5的矩陣,每行的數值都是從0到4?

結果:

[[0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]
 [0. 1. 2. 3. 4.]]

 

答案:

利用numpy數組的廣播功能

array1=np.arange(5)
array2=np.zeros((5,5))
array=array1+array2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM