Tabla de contenido
Un uso común de Numpy
1. Crea una matriz
1) Utilice np.array para crear
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
La salida de arr es array([1, 2, 3, 4, 5])
.
Ingresamos el siguiente código para crear una matriz bidimensional:
my_matrix = [[1,2,3],[4,5,6],[7,8,9]]
mtrx= np.array(my_matrix)
La salida de mtrx es la siguiente:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
2) Crea una matriz especial
#生成特殊数组
a1 = np.zeros((3,5)) #生成全0数组
print(a1)
b1 = np.ones((2,3))
print(b1)
3) Use arange () para generar una matriz
# 利用arange()生成数组
c1 = np.arange(10,20,2)
print(c1)
2. Indexación y corte
1) Indexe la matriz unidimensional y la matriz de dos dígitos de la siguiente manera:
print('arr[0]=',arr[0],'mtrx[1,1]=',mtrx[1,1])
Salida arr[0]= 1 mtrx[1,1]= 5
.
Corta la matriz:
arr[:3]
El resultado de salida es array([1, 2, 3])
.
2) Rebanada de cuenta regresiva:
arr[-3:-1]
Salida array([3, 4])
.
Agregue el tamaño del paso (paso), el tamaño del paso determina el intervalo de corte:
arr[1:4:2]
Salida array([2, 4])
.
3) Rebanada de matriz bidimensional:
mtrx[0:2, 0:2]
Salida, el significado del código es tomar la primera y segunda filas, la primera y segunda columnas:
array([[1, 2],
[4, 5]])
3. dtype
El dtpe de NumPy tiene los siguientes tipos de datos:
-
i - entero
-
b - booleano
-
u - entero sin signo
-
f - flotar
-
c - flotador complejo
-
m - timedelta
-
M - fecha y hora
-
O - objeto
-
S - cuerda
-
U - cadena Unicode
-
V - fragmento de memoria fijo para otro tipo (vacío)
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array(['apple', 'banana', 'cherry'])
print('arr1.dtype=',arr1.dtype,'arr2.dtype=',arr2.dtype)
La salida es arr1.dtype= int32 arr2.dtype= <U6
. El tipo de datos de arr1 es int32, y <U6 de arr2 significa no más de 6 cadenas Unicode.
Podemos especificar el tipo de dtype.
arr = np.array(['1', '2', '3'], dtype='f')
El resultado de salida es array([1., 2., 3.], dtype=float32)
, donde 1. significa 1.0, y puede ver que dtype está establecido en el tipo de datos float32.
4. Método general
4.1 arango
np.arange(0,101,2)
El resultado de salida es el siguiente: Este comando indica que los datos se generan uniformemente en el intervalo [0,101) y el paso del intervalo es 2.
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50,
52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100])
4.2 ceros
np.zeros((2,5))
El resultado de salida es el siguiente: Este comando indica que genera una matriz (matriz bidimensional) con 2 filas y 5 columnas, todas ceros.
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
4,3 unidades
np.ones((4,4))
El resultado de salida es el siguiente: Este comando indica que se emite una matriz con todos los 1 en 4 filas y 4 columnas.
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
4.4 ojo
np.eye(5)
El resultado de salida es el siguiente: Este comando indica que la salida es una matriz cuadrada de 5 filas y 5 columnas con una diagonal de 1 y todos ceros.
Una matriz cuadrada es una matriz con las mismas filas y columnas. ¿Cuál es la matriz de identidad en nuestras matemáticas?
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
4.5 rand
np.random.rand(5,2)
El comando genera 5 filas y 2 columnas de números aleatorios.
array([[0.67227856, 0.4880784 ],
[0.82549517, 0.03144639],
[0.80804996, 0.56561742],
[0.2976225 , 0.04669572],
[0.9906274 , 0.00682573]])
Si desea asegurarse de que se genere aleatoriamente el mismo número aleatorio que en este ejemplo, puede usar la misma semilla aleatoria que en este ejemplo. np.random.seed
Establecer por método.
np.random.seed(99)
np.random.rand(5,2)
4.6 citas
np.random.randint(0,101,(4,5))
El resultado de salida es el siguiente: Este comando indica que se selecciona aleatoriamente un número entero en el intervalo [0,101) para generar una matriz con 4 filas y 5 columnas.
array([[ 1, 35, 57, 40, 73],
[82, 68, 69, 52, 1],
[23, 35, 55, 65, 48],
[93, 59, 87, 2, 64]])
4.7 max min argmax argmin
Primero generamos aleatoriamente un conjunto de números:
np.random.seed(99)
ranarr = np.random.randint(0,101,10)
ranarr
Producción:
array([ 1, 35, 57, 40, 73, 82, 68, 69, 52, 1])
Ver los valores máximos y mínimos: utilizar
print('ranarr.max()=',ranarr.max(),'ranarr.min()=',ranarr.min())
El resultado de salida es ranarr.max()= 82 ranarr.min()= 1
.
Las posiciones de índice de los valores máximo y mínimo son:
print('ranarr.argmax()=',ranarr.argmax(),'ranarr.argmin()=',ranarr.argmin())
Salida:ranarr.argmax()= 5 ranarr.argmin()= 0
.
Tenga en cuenta que cuando hay varios valores máximos y mínimos, tome la posición del índice anterior.
Resumido como sigue:
.min (): devuelve el valor mínimo
.max (): devuelve el valor máximo
.argmin (): devuelve el índice del valor mínimo
.argmax (): devuelve el índice del valor máximo.
print(ranarr.argmin())
print(ranarr.argmax())
print(ranarr.max())
print(ranarr.min())
Dos, uso avanzado de NumPy
1. remodelar
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
Entre ellos, arr es una matriz unidimensional y newarr es una matriz de dos dígitos, donde la fila es 4 y la columna es 3 .
la remodelación se usa para dar forma a la matriz, y la forma se usa para reflejar las dimensiones de la matriz
print('arr.shape=',arr.shape,'newarr.shape=',newarr.shape)
Salida arr.shape= (12,) newarr.shape= (4, 3)
.
newarr
El resultado de salida es el siguiente:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
2. Fusionar y dividir
2.1 concatenar
Fusión de matriz unidimensional: use np.concatenar ((arr1, arr2)) Nota: dos capas de corchetes
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.concatenate((arr1, arr2))
arr
Salida: array([1, 2, 3, 4, 5, 6])
.
Fusión de matrices bidimensionales:
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2))
arr
La salida es:
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
Agregamos el parámetro axis = 1:
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)
arr
La salida es:
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
Movemos el mouse concatenate
y presionamos la tecla de atajo para Shift+Tab
ver la descripción del método.
Puede ver que el concatenate
método realiza la operación de combinación a lo largo del eje existente y el eje predeterminado = 0.
Cuando establecemos axis = 1, la operación de fusión procede a lo largo de la columna.
El resumen es
print("axis=0")
print(arr)
arr2 = np.concatenate((arr1,arr2),axis = 1)
print("axis=1")
print(arr2)
Los resultados de la operación son:
2.2 array_split
Divida la matriz:
arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
newarr = np.array_split(arr, 3)
newarr
El valor de newarr es:
[array([[1, 2],
[3, 4]]),
array([[5, 6],
[7, 8]]),
array([[ 9, 10],
[11, 12]])]
3. Buscar y filtrar
3.1 Búsqueda
NumPy puede where
encontrar el índice de la matriz que cumple la condición a través del método.
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
x = np.where(arr%2 == 0)
x
Producción:
(array([1, 3, 5, 7], dtype=int64),)
3.2 Cribado
Echemos un vistazo al siguiente código:
bool_arr = arr > 4
arr[bool_arr]
Salida:array([5, 6, 7, 8])
. Esta vez devolvemos el valor de la matriz, no el índice. bool_arr
¿Qué estamos mirando exactamente? bool_arr
La salida es:
array([False, False, False, False, True, True, True, True])
Entonces podemos reemplazar el filtro anterior con el siguiente comando.
arr[arr > 4]
4. Clasificación
sort
El método puede ordenar la matriz ndarry.
arr = np.array(['banana', 'cherry', 'apple'])
np.sort(arr)
Después de la salida de clasificación de resultados: array(['apple', 'banana', 'cherry'], dtype='<U6')
.
Para una matriz bidimensional, el sort
método ordena cada fila individualmente.
arr = np.array([[3, 2, 4], [5, 0, 1]])
np.sort(arr)
Resultado de salida:
array([[2, 3, 4],
[0, 1, 5]])
5. Funciones trigonométricas
Utilice np.sin () directamente
# c1 = np.arange(10,20,2)
# print(c1)
#
# #使用数学中的三角函数
# d1 = np.sin(c1)
# print(d1)
6. Aleatorio
6.1 Probabilidad aleatoria
¿Y si queremos cumplir con los siguientes requisitos?
Genere una matriz unidimensional de 100 valores, donde cada valor debe ser 3, 5, 7 o 9. Establezca la probabilidad de este valor en 3 a 0,1. Establezca la probabilidad de este valor en 5 a 0,3. La probabilidad de que este valor sea 7 se establece en 0,6. Establezca la probabilidad de este valor en 9 a 0.
Usamos el siguiente comando para resolver:
random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(100))
Resultado de salida:
array([7, 5, 7, 7, 7, 7, 5, 7, 5, 7, 7, 5, 5, 7, 7, 5, 3, 5, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 5, 3, 7, 5, 7, 5, 7, 3, 7, 7, 3, 7, 7, 7, 7, 3,
5, 7, 7, 5, 7, 7, 5, 3, 5, 7, 7, 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 5,
7, 7, 7, 7, 7, 5, 7, 7, 7, 7, 3, 7, 7, 5, 7, 5, 7, 5, 7, 7, 5, 7,
7, 7, 7, 7, 7, 3, 5, 5, 7, 5, 7, 5])
6.2 Disposición aleatoria
permutation genera una nueva permutación aleatoria basada en la matriz original.
np.random.seed(99)
arr = np.array([1, 2, 3, 4, 5])
new_arr = np.random.permutation(arr)
new_arr
La salida array([3, 1, 5, 4, 2])
es:. La matriz original arr
permanece sin cambios.
shuffle cambia la matriz original a una disposición aleatoria. Shuffle significa shuffle en inglés.
np.random.seed(99)
arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
arr
La salida array([3, 1, 5, 4, 2])
es:. Se arr
cambia la matriz original .
6.3 Distribución aleatoria
Utilice el np.random.normal
método para generar números aleatorios que se ajusten a una distribución normal.
x = np.random.normal(loc=1, scale=2, size=(2, 3))
x
El resultado de salida es:
array([[ 0.14998973, 3.22564777, 1.48094109],
[ 2.252752 , -1.64038195, 2.8590667 ]])
Si queremos ver la distribución aleatoria de x, necesitamos instalar seaborn para dibujar la imagen. Instalar usando pip:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple seaborn
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(x, hist=False)
plt.show()
Distribución binomial
Utilice el np.random.binomial
método para generar números aleatorios que se ajusten a la distribución binomial.
x = np.random.binomial(n=10, p=0.5, size=10)
x
La salida array([8, 6, 6, 2, 5, 5, 5, 5, 3, 4])
es:.
Dibuja la imagen:
import matplotlib.pyplot as plt
import seaborn as sns
sns.distplot(x, hist=True, kde=False)
plt.show()
Distribución polinomial
La distribución polinomial es una representación general de la distribución binomial. Utilice el np.random.multinomial
método para generar números aleatorios que se ajusten a la distribución polinomial.
x = np.random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
x
El código anterior puede entenderse simplemente como lanzar un dado. n = 6 es la cara de los dados y pvals indica que la probabilidad de cada cara es 1/6.