Nota: Isso está pedindo o reverso da conversão usual de tupla em array.
Eu tenho que passar um argumento para uma função (c ++ empacotado) como uma tupla aninhada. Por exemplo, o seguinte funciona
X = MyFunction( ((2,2),(2,-2)) )
Considerando que o seguinte não
X = MyFunction( numpy.array(((2,2),(2,-2))) )
X = MyFunction( [[2,2],[2,-2]] )
Infelizmente, o argumento que eu gostaria de usar vem a mim como uma matriz numpy. Essa matriz sempre tem dimensões 2xN para algum N, que pode ser muito grande.
Existe uma maneira fácil de converter isso em uma tupla? Eu sei que poderia simplesmente fazer um loop, criando uma nova tupla, mas preferiria se houvesse algum bom acesso que a matriz numpy fornece.
Se não for possível fazer isso tão bem quanto eu espero, qual é a maneira mais bonita de fazer isso em loop ou algo assim?
tuple(arr)
Aqui está uma função que fará isso:
E um exemplo:
fonte
type(a)==numpy.ndarray
?Eu não estava satisfeito, então finalmente usei isto:
Não sei se é mais rápido, mas parece mais eficaz;)
fonte
Outra opção
Se você está passando arrays NumPy para funções C ++, você também pode querer usar Cython ou SWIG.
fonte
list
omitindo os colchetes, ou seja, usandotuple(tuple(row) for row in myarray)
Se você gosta de cortes longos, aqui está outra forma de tupla (tupla (a_m.tolist ()) para a_m em a)
A saída é ((1, 2), (3, 4))
Observe apenas (tupla (a_m.tolist ()) para a_m em a) fornecerá uma expressão de gerador. Meio inspirado pelo comentário de @ norok2 à resposta de Greg von Winckel
fonte