วิธีการแปลงอาร์เรย์ของสตริงเป็นอาร์เรย์ของการลอยใน numpy?


คำตอบ:


179

ถ้าคุณกำลังอ่านข้อมูลในรูปแบบรายการให้ทำnp.array(map(float, list_of_strings))(หรือใช้ความเข้าใจในรายการเทียบเท่า) (ใน Python 3 คุณจะต้องเรียกlistใช้mapค่าที่ส่งคืนหากคุณใช้mapเนื่องจากmapส่งคืนตัวทำซ้ำทันที)

อย่างไรก็ตามหากเป็นอาร์เรย์ของสตริงที่เป็นตัวเลขอยู่แล้วมีวิธีที่ดีกว่า ใช้astype().

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)

และถ้าคุณมีอาร์เรย์ที่มีสตริงที่ฉันต้องการรักษา? เช่น ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin - จากนั้นใช้ไฟล์list. อาร์เรย์ Numpy ถูกพิมพ์โดยเจตนาเป็นเนื้อเดียวกัน ถ้าคุณต้องการจริงๆคุณสามารถใช้อาร์เรย์วัตถุ (เช่นnp.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)) อย่างไรก็ตามอาร์เรย์ออบเจ็กต์ไม่มีข้อได้เปรียบที่สำคัญมากกว่าการใช้รายการ
Joe Kington


3

ตัวเลือกอื่นอาจเป็นnumpy.asarray :

import numpy as np
a = ["1.1", "2.2", "3.2"]
b = np.asarray(a, dtype=np.float64, order='C')

สำหรับ Python 2 *:

print a, type(a), type(a[0])
print b, type(b), type(b[0])

ที่เกิดขึ้นใน:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>

1
ฉันเปรียบเทียบคำตอบทั้งหมดที่นี่ใน python 2.7 สมมติว่าฉันได้รับรายการสตริง 512 รายการซึ่งแสดงถึงตัวเลขทศนิยมวิธีนี้เร็วที่สุด (เร็วกว่าคำตอบของ pradeep bisht เล็กน้อยเร็วกว่าคำตอบของ Thomio ประมาณ 1.5 เท่าและเร็วกว่าคำตอบที่ยอมรับมากกว่าสองเท่า) มีโหวตเพิ่ม!
jodag

2

หากคุณมี (หรือสร้าง) สตริงเดียวคุณสามารถใช้np.fromstring :

import numpy as np
x = ["1.1", "2.2", "3.2"]
x = ','.join(x)
x = np.fromstring( x, dtype=np.float, sep=',' )

หมายเหตุx = ','.join(x)แปลง x '1.1, 2.2, 3.2'อาร์เรย์สตริง หากคุณอ่านบรรทัดจากไฟล์ txt แต่ละบรรทัดจะเป็นสตริงอยู่แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.