ฉันต้องการแบ่งอาร์เรย์ NumPy nxn ฉันต้องการที่จะแยกโดยพลการเลือกแถวม. และคอลัมน์ของอาร์เรย์นั้น (คือไม่มีรูปแบบใด ๆ ในจำนวนของแถว / คอลัมน์) ทำให้มันใหม่ MXM อาร์เรย์ สำหรับตัวอย่างนี้ให้เราบอกว่าอาร์เรย์เป็น 4x4 และฉันต้องการที่จะดึงอาร์เรย์ 2x2 ออกมา
นี่คืออาร์เรย์ของเรา:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
บรรทัดและคอลัมน์ที่จะลบเหมือนกัน กรณีที่ง่ายที่สุดคือเมื่อฉันต้องการแยก submatrix 2x2 ที่อยู่ที่จุดเริ่มต้นหรือตอนท้ายเช่น:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
แต่ถ้าฉันต้องการลบการผสมแถว / คอลัมน์อื่นอีกล่ะ? ถ้าฉันต้องการลบบรรทัด / แถวแรกและแถวที่สามการแยกเมทริกซ์ย่อยจะทำ[[5,7],[13,15]]
อย่างไร สามารถมีองค์ประกอบของแถว / บรรทัดใด ๆ ฉันอ่านที่ไหนสักแห่งที่ฉันต้องทำดัชนีอาร์เรย์ของฉันโดยใช้อาร์เรย์ / รายการดัชนีสำหรับทั้งแถวและคอลัมน์ แต่ดูเหมือนจะไม่ทำงาน:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
ฉันพบวิธีหนึ่งซึ่งก็คือ:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
ปัญหาแรกของเรื่องนี้คือมันอ่านยาก แต่ฉันสามารถอยู่กับมันได้ หากใครบางคนมีทางออกที่ดีกว่าแน่นอนฉันอยากได้ยิน
สิ่งอื่นคือฉันอ่านฟอรัมที่การทำดัชนีอาร์เรย์ด้วยอาร์เรย์บังคับให้ NumPy ทำสำเนาของอาร์เรย์ที่ต้องการดังนั้นเมื่อทำการรักษาด้วยอาร์เรย์ขนาดใหญ่สิ่งนี้อาจกลายเป็นปัญหาได้ เหตุใดกลไกนี้จึงทำงานอย่างไร