วิธีพิมพ์อาร์เรย์ Numpy โดยไม่มีสัญลักษณ์เพิ่มเติม (วงเล็บเหลี่ยม [ ] และช่องว่างระหว่างองค์ประกอบ)

ฉันมีอาร์เรย์ตัวเลข 2 มิติที่มีลักษณะดังนี้:

[[a b c]
 [d e f]
 [g h i]]

ฉันต้องการพิมพ์โดยไม่มีปุยสัญลักษณ์เริ่มต้นใด ๆ ที่มักจะมาพร้อมกับอาร์เรย์ คือ [, ] และช่องว่างระหว่างองค์ประกอบ บางสิ่งเช่นนี้:

abc
def
ghi

เป็นไปได้ไหมที่จะทำสิ่งนั้น (แน่นอนว่าไม่มี Python loop เล็กน้อยและอาจมีราคาแพง)

ฉันได้ดูที่ numpy.set_printoptions แต่ดูเหมือนว่า เพียงตั้งค่าตัวเลือกการนำเสนอสำหรับวิธีการแสดงองค์ประกอบ ไม่ใช่อักขระที่อยู่ระหว่างนั้น

แก้ไข: องค์ประกอบในอาร์เรย์มีการแสดงสตริงที่สามารถเป็นอะไรก็ได้ รวมถึง [, ] และช่องว่าง ตัวอย่างขั้นต่ำของวิธีสร้างอาร์เรย์ดังกล่าว:

class custom(object):
    def __repr__(self):
        return 'a'
a = numpy.empty((5, 5), custom)
a.fill(custom())
print a

person Etienne Perot    schedule 22.03.2012    source แหล่งที่มา
comment
เพื่อให้ชัดเจน: repr ที่คุณกำหนดเองมีเทอร์มินัล . ที่คุณต้องการกำจัด แต่อาจรวมถึงเทอร์มินัลอื่น ๆ ที่คุณไม่มีด้วย ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณต้องการเปลื้องผ้า   -  person DSM    schedule 23.03.2012
comment
แย่ของฉัน นี่เป็นเพราะฉันแก้ไขการเป็นตัวแทนด้วยมือ คำถามเดิมของฉันใช้อาร์เรย์ตัวเลขปกติ ซึ่งมี . หลังตัวเลขแต่ละตัวที่ใช้เป็นตัวคั่น (หรือเป็นตัวคั่นทศนิยม ไม่แน่ใจ) ต่อมา ฉันแก้ไขคำถามเพื่อสะท้อนให้เห็นว่าประเภทข้อมูลของอาร์เรย์ไม่จำเป็นต้องเป็นตัวเลข และลืมเปลี่ยนตัวคั่นตามนั้น แก้ไขอีกครั้ง.   -  person Etienne Perot    schedule 23.03.2012
comment
เซ็ตย่อย: ลบเฉพาะ []: stackoverflow.com/questions/9360103/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 05.02.2017


คำตอบ (4)


แม้ว่าจำนวนนี้จะค่อนข้างวนซ้ำ แต่ฉันคิดว่านี่อาจเป็นสิ่งที่ดีที่สุดที่คุณจะได้รับ โดยทั่วไปวิธี join string จะค่อนข้างเร็ว

>>> a = np.array([[1,2,3],[2,4,6],[-1,-2,-3]])
>>> print '\n'.join(''.join(str(cell) for cell in row) for row in a)
123
246
-1-2-3

ฉันคิดว่า ณ จุดนี้ คุณน่าจะดีที่สุดในการปรับใช้บางสิ่งบางอย่างและวัดระยะเวลาที่ใช้ ฉันเดาว่าส่วนที่ช้าที่สุดของโค้ดจะเป็นการพิมพ์ไปยังคอนโซลจริง ๆ โดยไม่ต้องรวมสตริงเข้าด้วยกัน

person Wilduck    schedule 22.03.2012
comment
ฉันเดาว่านั่นหมายความว่าไม่มีวิธีใดที่จะทำได้ ขอบคุณนะ - person Etienne Perot; 23.03.2012

มันค่อนข้างง่าย ถ้า a เป็นอาร์เรย์ของคุณ ให้ทำดังนี้:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a))))
person Manoj Narang    schedule 09.05.2017

person    schedule
comment
คุณต้องการ .buffer ที่ sys.stdout.buffer จริงๆ หรือ? - person Ciro Santilli 新疆再教育营六四事件ۍ 05.02.2017
comment
@CiroSantilli烏坎事件2016六四事件法轮功, savetxt เขียน bytestring และคาดว่าจะเป็นไฟล์ไบนารี่ - person panda-34; 05.02.2017

person    schedule
comment
+1 เพราะมันตอบคำถามที่ฉันถาม แต่อาร์เรย์จริงที่เป็นปัญหาใช้ประเภทข้อมูลที่กำหนดเองซึ่งการแสดงสตริงสามารถเป็นอะไรก็ได้รวมถึงการเว้นวรรคและวงเล็บปีกกา แก้ไขคำถามเพื่อสะท้อนสิ่งนี้ - person Etienne Perot; 23.03.2012
comment
@Etienne Perot - กลับไปที่กระดานวาดภาพ! - person fraxel; 23.03.2012