当前位置:网站首页>Numpy --- basic learning notes

Numpy --- basic learning notes

2022-07-07 15:50:00 madkeyboard

Numpy and List

​ List The functions that can be done are roughly the same as Numpy It's almost the same , however Numpy The advantage of is that the operation is very fast , because Numpy In storage, a piece of continuous physical address of the computer is used to store data , It takes less time to search data , and List The stored data is scattered in different physical spaces .

​ So when dealing with large-scale data ,Numpy than List The effect is good .

image-20220702201030411

​ An example is given to demonstrate the time they spend processing data separately , As you can see from the results , Let a random input increase 10000 Time ,Numpy The calculation speed of is about 10 times , If there's more data , The effect should be better .

import time
import numpy as np

t0 = time.time()
# python list
l = list(range(100))
for _ in range(10000):
    for i in range(len(l)):
        l[i] += 1

t1 = time.time()
# numpy array
a = np.array(l)
for _ in range(10000):
    a += 1

print("Python list spend {:.3f}s".format(t1-t0))
print("Numpy array spend {:.3f}s".format(time.time()-t1))

image-20220702201346320

dimension

​ Numpy One of its advantages is that it can handle multidimensional data , In machine learning and artificial intelligence, the calculation of multidimensional data often occurs .

  1. Create multidimensional data

    ​ For example, it takes time for us to test a car to accelerate for hundreds of miles , First create a list of hundred mile accelerations

car = np.array([5,12,3,13])
print(" Time consuming : ",car,"\n dimension :",car.ndim)

image-20220702202346131

​ You can see that the output is one-dimensional , Then if you add several groups of data, it means multiple tests , You create two-dimensional data

car = np.array(
  [[5,12,3,13],
  [5.2,11,14,5],
  [6.1,6.6,4.3,6.5]])
print(" Time consuming : ",car,"\n dimension :",car.ndim)

image-20220702202648892

​ Empathy , Create a three-dimensional representation to test the vehicle on different sites .

car = np.array([
[
    [5, 10, 12, 6],
    [5.1, 8.2, 11, 6.3],
    [4.4, 9.1, 10, 6.6]
],
[
    [6, 11, 13, 7],
    [6.1, 9.2, 12, 7.3],
    [5.4, 10.1, 11, 7.6]
],
])
print(" The total dimension :", car.ndim)
print(" site  1  data :\n", car[0], "\n site  1  dimension :", car[0].ndim)
print(" site  2  data :\n", car[1], "\n site  2  dimension :", car[1].ndim)

image-20220702203007344

  1. Add data

    Add one-dimensional data .np.concatenate()

cars1 = np.array([5, 10, 12, 6])
cars2 = np.array([5.2, 4.2])
cars = np.concatenate([cars1, cars2])
print(cars) #[ 5. 10. 12. 6. 5.2 4.2]

Add 2D data

test1 = np.array([5, 10, 12, 6])
test2 = np.array([5.1, 8.2, 11, 6.3])

#  First, we need to turn them into two dimensions , The following two methods can add dimensions 
test1 = np.expand_dims(test1, 0)
test2 = test2[np.newaxis, :]

print("test1 After adding dimensions  ", test1)
print("test2 After adding dimensions  ", test2)

#  Then superimpose on the first dimension 
all_tests = np.concatenate([test1, test2])
print(" After the exhibition \n", all_tests)

image-20220702203811233

  1. Merge data

    As long as the dimensions can be aligned , You can merge on any dimension .

import time
import numpy as np

test1 = np.array([5, 10, 12, 6])
test2 = np.array([5.1, 8.2, 11, 6.3])

#  First, we need to turn them into two dimensions , The following two methods can add dimensions 
test1 = np.expand_dims(test1, 0)
test2 = test2[np.newaxis, :]

all_tests = np.concatenate([test1, test2])

print(" The first dimension is superimposed :\n",np.concatenate([all_tests,all_tests],axis=0))
print(" The second dimension is superimposed :\n",np.concatenate([all_tests,all_tests],axis=1))

image-20220702204458110

np.hstack() Horizontal merger

np.vstach() Vertical merge

  1. Observation form
test1 = np.array([
[5, 10, 12, 6],
[5.1, 8.2, 11, 6.3],
[4.4, 9.1, 10, 6.6]
])

print(" According to the total :",test1.size)
print(" The first dimension ",test1.shape[0]) #  Indicates how many tests have been performed 
print(" The second dimension ",test1.shape[1]) #  Indicates the number of vehicles tested 
print(" All dimensions ",test1.shape)

# The first dimension : 3
# The second dimension : 4
# All dimensions : (3, 4)

Data selection

  1. Single choice
import numpy as np

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

print("b[1]:\n",b[1]) #  Select all numbers in the second row 
print("b[2,1]:\n",b[2,1]) #  Select the number of the third row and the second column 
print("b[[1,0],[2,3]]:\n",  
b[[1,0],
[2,3]]) #  The two numbers taken are [1,2]  and  [0,3]

image-20220702211549842

  1. section
print("b[1]:\n",b[:2]) #  Select all the numbers in the first and second rows 
print("b[2,1]:\n",b[:2,:3]) #  Select the first and second rows , front 3 Number of columns 

image-20220702211919362

  1. To choice
import numpy as np

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

condition = (b < 5) & (b != 2)
print(b[condition]) # 1 3 4
print(np.where(condition,-2,b)) #  Replace the value satisfying the condition with -2
print(np.where(condition,-2,-1)) #  Replace the value satisfying the condition with -2, If not, replace with -1

Basic operation

import numpy as np

a = np.array([
  [1,2],
  [3,4]
])
b = np.array([
  [5,6],
  [7,8]
])
print(a.dot(b)) #  Matrix dot product  print(np.dot(a, b))

np.max() #  Maximum 
np.min() #  minimum value 
np.sum() #  Sum up 
np.prod() #  Multiplicative multiplication 
np.size() #  total 
np.count_nonzero() #  Nonzero total 
np.mean() #  The average 
np.median() #  Median 
np.std() #  Standard deviation 
np.argmax() #  The subscript of the maximum value 
np.argmin() #  Subscript of minimum value 
np.ceil() #  Rounding up 
np.floor() #  Rounding down 
np.clip(a,b) #  Define a rounded upper 、 Lower bound 
a = np.array([150.1, 166.4, 183.7, 170.8])
print("clip:", a.clip(160, 180)) 
# clip: [160. 166.4 180. 170.8]

#  Official documents  https://numpy.org/devdocs/user/quickstart.html#basic-operations

Change the data form

  1. Add dimensions

    a_2d = a[np.newaxis, :]
    a_none = a[:, None]
    a_expand = np.expand_dims(a, axis=1)
    #  These three methods can achieve the same effect 
    
  2. Reduce dimensions

    a_squeeze = np.squeeze(a_expand)
    a_squeeze_axis = a_expand.squeeze(axis=1)
    # squeeze  Only dimensions can be reduced shape Up for 1 Dimensions , Ensure that the data structure does not change 
    
    #  If you want to change the dimension, you can use  reshape
    a = np.array([1,2,3,4,5,6])
    a1 = a.reshape([2, 3])
    a2 = a.reshape([3,1,2]) #  I don't understand here 
    #
    a1 shape: (2, 3)
    [[1 2 3]
     [4 5 6]]
    a2 shape: (3, 1, 2)
    [[[1 2]]
     [[3 4]]
     [[5 6]]]
    #
    
    #  Matrix transposition 
    np.transpose()
    np.T
    
  3. Merge

    np.column_stack() #  columns 
    np.row_stack() #  merger 
    
    #  The above two merge methods are similar to  vstack and hstack The difference is that : Use vstack and hstack You need to process dimension information first , and column_stack and row_stack Automatic processing 
    feature_a = np.array([1,2,3,4,5,6])[:, None]
    feature_b = np.array([11,22,33,44,55,66])[:, None]
    c_stack = np.hstack([feature_a, feature_b])
    
    # np.concatenate()  It is suitable for merging in different situations 
    np.concatenate([a, b], axis=0)
    
  4. Take apart

    a = np.array(
    [[ 1, 11, 2, 22],
     [ 3, 33, 4, 44],
     [ 5, 55, 6, 66],
     [ 7, 77, 8, 88]]
    )
    print(np.vsplit(a, indices_or_sections=2))  #  In two parts 
    print(np.vsplit(a, indices_or_sections=[2,3]))  #  Slice into  [:2],[2:3], [3:]
    
    np.hsplit() #  Crosscut   The function is similar to 
    

    image-20220703201427457

    a = np.array(
    [[ 1, 11, 2, 22],
     [ 3, 33, 4, 44],
     [ 5, 55, 6, 66],
     [ 7, 77, 8, 88]]
    )
    print(np.split(a, indices_or_sections=2, axis=0))  #  In two parts 
    print(np.split(a, indices_or_sections=[2,3], axis=1))  #  In the second dimension , Slice into  [:2],[2:3],[3:]
    
    #  Use split  Custom segmentation 
    

    image-20220703202323993

原网站

版权声明
本文为[madkeyboard]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071326433955.html