天天看點

02_NumpyNumpy(Numerical Python)1-array和asarray的差別2-ndarray的形狀3-記得有一道面試題如下:

Numpy(Numerical Python)

數字化的python

是一個開源的Python科學計算庫,用于快速處理任意次元的數組。

快速的原因:

1st:記憶體塊風格:ndarray中的所有元素的類型都是相同的,是以ndarray在存儲元素時記憶體可以連續

2nd:ndarray支援并行化運算(向量化運算)

3rd: 效率遠高于純Python代碼

Numpy底層使用C語言編寫,内部解除了GIL(全局解釋器鎖),其對數組的操作速度不受Python解釋器的限制,是以,其效率遠高于純Python代碼。

1-array和asarray的差別

array數組

eg1:

import numpy as np
data1=[[2, 2, 2], [1, 1, 1], [0, 0, 0]]
arr2 = np.array(data1)
arr3 = np.asarray(data1)
print(arr2)
print(type(arr2))
print(arr3)
print(type(arr3))
---------------------------------------------
[[2 2 2]
 [1 1 1]
 [0 0 0]]
<class 'numpy.ndarray'>
[[2 2 2]
 [1 1 1]
 [0 0 0]]
<class 'numpy.ndarray'>
           

這裡看到結果相同,都對複制中繼資料

eg2:

arr = np.ones((3, 3))
arr0 = np.array(arr)
# 相當于索引的形式,并沒有真正的建立一個新的
arr1 = np.asarray(arr)
arr[1] = 333
print(arr0)
print(type(arr0))
print(arr1)
print(type(arr1))
--------------------------------------------
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
<class 'numpy.ndarray'>
[[  1.   1.   1.]
 [333. 333. 333.]
 [  1.   1.   1.]]
<class 'numpy.ndarray'>
           

随着對中繼資料更改,asarray的資料随之改變

二者定義

np.asarray

def asarray(a, dtype=None, order=None):
    return array(a, dtype, copy=False, order=order)
           

np.array

def array(a, dtype=None, order=None):
    return array(a, dtype, copy=True, order=order)
           

np.array(預設情況下)将會copy該對象

2-ndarray的形狀

# 建立不同形狀的數組
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(a.shape)
print(b.shape)
print(c.shape)
-------------------------------------------------
(2, 3)  # 二維數組
(4,)    # 一維數組
(2, 2, 3) # 三維數組
           

3-記得有一道面試題如下:

問題:利用numpy随機初始化正太分布數組或者一個二維矩陣,并 一句代碼找出矩陣中大于1的位置

這裡用的正太分布np.random.normal(loc=0.0, scale=1.0, size=None)

loc:float 此機率分布的均值(對應着整個分布的中心centre)

scale:float 此機率分布的标準差(對應于分布的寬度,scale越大越矮胖,scale越小,越瘦高)

size:int or tuple of ints 輸出的shape,預設為None,隻輸出一個值

import numpy as np
array = np.random.normal(4, 4, (2, 2))
print(array)
print(array.shape)
array_ = array[array > 1]
print(array_)
array_0 = array[np.where(array>1)]
# *******還不知清楚是不是where的運作效率更好*******
print(array_0)
------------------------------------------------------
[[ 5.58765753  8.60368122]
 [ 6.05855259 -3.56926281]]
(2, 2)
[5.58765753 8.60368122 6.05855259]
[5.58765753 8.60368122 6.05855259]
           

一句代碼帶入就可以了,目前我覺得這樣可以解決