Estaba tratando de convertir una gran matriz NumPy en una cadena usando np.array_str() o str() pero resulta que la salida no contiene todos los valores de la matriz.

weight=np.random.rand(5000,500)
print(weight.shape)
print(len(np.array_str(weight)))
print(len(str(weight)))
>>(5000,500)
>>443
>>443

Que es mucho menos que el recuento real de dígitos.

¿Cómo puedo obtener la matriz completa como una cadena? nótese bien Quiero escribir la picadura en un archivo de texto.

1
user3363813 5 jun. 2020 a las 23:54

3 respuestas

La mejor respuesta

str(weight) es solo la representación de consola de la cadena, no convierte todos valores en valores de cadena, sino que genera una cadena que se puede imprimir en la consola, por ejemplo:

>>> str(weight)
'[[0.61063338 0.76216809 0.09732382 ... 0.74375515 0.09525192 0.43705637]\n [0.70583367 0.25657426 0.53279926 ... 0.72487029 0.36734946 0.67419836]\n [0.95006557 0.84218583 0.75602697 ... 0.51730571 0.11963987 0.84481707]\n ...\n [0.35017875 0.16172616 0.18016095 ... 0.74119508 0.09725982 0.93651959]\n [0.41584527 0.62796044 0.65794606 ... 0.12521724 0.62784847 0.57898542]\n [0.72758274 0.99773068 0.15162054 ... 0.42649996 0.631018   0.446582  ]]'

Intente convertir su matriz a una lista y luego a una cadena en su lugar:

str(weight.tolist())
1
Benjamin 5 jun. 2020 a las 21:13

Para generar una representación separada por tabulaciones y líneas (si acepta esto), puede hacer

with open("test.txt", "w") as fh: weight.tofile(fh, sep="\t") 

Otra forma es volcarlo como json, que es la misma sintaxis que el código de Python para una lista:

from json import dump
with open("test.txt", "w") as fh: dump(weight.tolist(), fh)

Usé json para asegurarme de que no se pierda nada.

1
Dr. V 5 jun. 2020 a las 21:16

Puedes probar:

conv_str = [[str(j) for j in i] for i in weight]
0
dimay 5 jun. 2020 a las 21:18