numpy
Eu tenho um escalar zero-dimensional e uma matriz s
bidimensional . Eu quero formar uma matriz de vetores em que todos os elementos de são pareados com como no exemplo a seguir:numpy
m
m
s
import numpy as np
s = np.asarray(5)
m = np.asarray([[1,2],[3,4]])
# Result should be as follows
array([[[5, 1],
[5, 2]],
[[5, 3],
[5, 4]]])
Em outras palavras, quero vetorizar a operação np.asarray([s, m])
elemento a elemento no nível mais baixo de m
. Existe uma maneira óbvia de fazer isso para qualquer array multidimensional m
dentro de numpy
?
Tenho certeza de que isso está em algum lugar, mas tenho dificuldade em expressar em palavras e não consigo encontrar. Se você puder encontrar, sinta-se à vontade para me redirecionar para lá.
Uma solução possível, que usa
broadcast_to
estack
funções para combinar dois arrays,s
em
, em um único array ao longo de um novo eixo. Os passos são:Primeiro,
np.broadcast_to(s, m.shape)
expande o formato do arrays
para corresponder ao do arraym
sem copiar dados.Em seguida,
np.stack([np.broadcast_to(s, m.shape), m], axis=-1)
junta-se ao transmitidos
em
ao longo de um novo último eixoSaída:
O
stack
está bom. Mas comos
precisa ser repetido, uma boa alternativa é criar um array zero do formato desejado, e permitirbroadcasting
preencher as colunas: