np.tile, np.meshgrid, np.where resumen de aprendizaje

np.tile, np.meshgrid, np.where resumen de aprendizaje


Recientemente, me encontré con varios usos de numpy cuando estaba mirando el código. Los resumiré y registraré aquí, de la manera más concisa posible. Mi último artículo sobre el uso de numpy es: python numpy learning summary
PD : Los siguientes sitios web oficiales corresponden a numpy1. Versión 17

一 、 numpy.tile ()

En primer lugar, azulejo significa baldosas, lo que significa baldosas, por lo que esta función es expandir y difundir la matriz np.ndarray como baldosas y baldosas una por una.
numpy.tile (A, repeticiones)

  • La matriz de entrada A, reps especifica el múltiplo de expansión del eje a lo largo de cada eje de A, la dimensión de la matriz de salida es max(d, A.ndim), donde des la longitud de las repeticiones
  • Cuando del A.ndimtiempo no es igual a la dimensión, la dimensión más pequeña coloca uno delante de la dimensión de inserción, un valor de 1, y luego al eje final A a lo largo de un primer eje, correspondiente a un valor correspondiente a extender dentro del eje de repeticiones, y Nota: Esta no es una repetición de una sola fila y una sola columna, sino una expansión general. Puede aprender de numpy.repeat
>>> a = np.array([0, 1, 2])
>>>> np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])
>>> np.tile(a, (2, 3)) # 先把[0,1,2]升维成[[0,1,2]]
array([[0, 1, 2, 0, 1, 2, 0, 1, 2],
       [0, 1, 2, 0, 1, 2, 0, 1, 2]])
>>> np.tile(a, (2, 1, 3))
array([[[0, 1, 2, 0, 1, 2, 0, 1, 2]],
       [[0, 1, 2, 0, 1, 2, 0, 1, 2]]])
>>> b = np.array([[1, 2], [3, 4]])
>>> np.tile(b, (2, 1))
array([[1, 2],
       [3, 4],
       [1, 2],
       [3, 4]])
# 注意不是下面的这个结果,即上面红色字体提示:
# array([[1, 2],
#        [1, 2],
#        [3, 3],
#        [3, 4]])

El sitio web oficial recomienda encarecidamente utilizar numpy.broadcast_to para la transmisión.

二 、 numpy.meshgrid ()

numpy.meshgrid (* xi, ** kwargs)

  • La entrada es una matriz 1-D: x1, x2, ..., xn. Hay varios puntos finales de la cuadrícula que son de varias dimensiones. Generalmente, ingresamos xey, por lo que la cuadrícula generada es un plano bidimensional.
  • Hay algunos parámetros opcionales, como indexación: sistema de coordenadas {'xy', 'ij'} In the 2-D case with inputs of length M and N, the outputs are of shape (N, M) for ‘xy’ indexing and (M, N) for ‘ij’ indexing, es decir , el orden de índice devuelto será diferente, disperso: bool, copia: bool
>>> nx = 5
>>> ny = 3
>>> x = np.arange(nx) - (nx - 1) / 2
>>> x
array([-2., -1.,  0.,  1.,  2.])
>>> y = np.arange(ny) - (ny - 1) / 2
>>> y
array([-1.,  0.,  1.])
>>> xv, yv = np.meshgrid(x, y) #默认indexing='xy',所以输入(5,3),输出(3,5)
>>> xv
array([[-2., -1.,  0.,  1.,  2.],
       [-2., -1.,  0.,  1.,  2.],
       [-2., -1.,  0.,  1.,  2.]])
>>> yv
array([[-1., -1., -1., -1., -1.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.]])
>>> xv, yv = np.meshgrid(x, y, sparse=True)  # make sparse output arrays
>>> xv
array([[-2., -1.,  0.,  1.,  2.]])
>>> yv
array([[-1.],
       [ 0.],
       [ 1.]])
>>> xv, yv = np.meshgrid(x, y, indexing='ij')
>>> xv
array([[-2., -2., -2.],
       [-1., -1., -1.],
       [ 0.,  0.,  0.],
       [ 1.,  1.,  1.],
       [ 2.,  2.,  2.]])
>>> yv
array([[-1.,  0.,  1.],
       [-1.,  0.,  1.],
       [-1.,  0.,  1.],
       [-1.,  0.,  1.],
       [-1.,  0.,  1.]])

Para el caso de 2-D, la memoria puede ser así: ahora de acuerdo con la entrada se deriva la forma de la salida, y luego x se llena línea por línea, y se agrega y columna por columna en orden.

Tres, numpy.where ()

numpy.where (condición, x, y)

  • Ingrese la condición, si es verdadera, devuelva x; de lo contrario, devuelva y. condición, x, y debe poder transmitirse con la misma forma
  • Pero cuando solo hay una condición de parámetro de entrada, el uso de la función como numpy.nonzero
    se puede dividir en dos situaciones: 1) Cuando se dan los tres parámetros de condición, x, y; 2) Solo un parámetro de condición es Dado En ese momento, discutiré la situación en las siguientes situaciones:
    Situación 1 Lo recordé así: los conceptos básicos unidimensionales no se satisfacen uno por uno, o es simple; en situaciones multidimensionales, generalmente condición, x, y tienen la misma forma, entonces en cuanto a elementos La condición de control de, también devuelve el valor en la posición correspondiente, si la condición es verdadera, devuelve el valor en la posición anterior correspondiente, y si la condición es falsa, devuelve el valor en la posición correspondiente en la parte posterior
# 情况 1)
# [xv if c else yv
#  for c, xv, yv in zip(condition, x, y)] 对于所有数组都是1-D的时候
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(a < 5, a, 10*a)
array([ 0,  1,  2,  3,  4, 50, 60, 70, 80, 90])
>>> np.where([[True, False], [True, True]],
...          [[1, 2], [3, 4]],
...          [[9, 8], [7, 6]])
array([[1, 8],
       [3, 4]])

Caso 2 Cuando el parámetro de entrada es solo condición, se devuelve el índice del elemento que satisface la condición (es decir, distinto de cero) y se devuelve como una tupla. Debido a que el índice se devuelve, cuando la condición de entrada tiene N dimensiones, la longitud de la tupla devuelta también es Is N, mira el ejemplo

# 情况 2)
>>> np.where(a > 5)
(array([3, 4], dtype=int64),)
>>> a[np.where(a > 5)]
array([6, 7])
>>> a = np.arange(8).reshape(2,2,2)
>>> a
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])
>>> np.where(a > 4)
(array([1, 1, 1], dtype=int64), 
 array([0, 1, 1], dtype=int64), 
 array([1, 0, 1], dtype=int64))
 # 返回的第一列[1,0,1]位置就是5,第二列[1,1,0]就是6的位置
 # 第三列[1,1,1]就是7的位置,所以就是满足条件(非零)的索引

Supongo que te gusta

Origin blog.csdn.net/laizi_laizi/article/details/104442539
Recomendado
Clasificación