วิธีการวนซ้ำคอลัมน์อาร์เรย์?


109

สมมติว่าฉันมีอาร์เรย์และ mxn ฉันต้องการส่งแต่ละคอลัมน์ของอาร์เรย์นี้ไปยังฟังก์ชันเพื่อดำเนินการบางอย่างกับคอลัมน์ทั้งหมด ฉันจะวนซ้ำคอลัมน์ของอาร์เรย์ได้อย่างไร

ตัวอย่างเช่นฉันมีอาร์เรย์ 4 x 3 เช่น

1  99 2
2  14 5
3  12 7
4  43 1

for column in array:
  some_function(column)

โดยที่คอลัมน์จะเป็น "1,2,3,4" ในการวนซ้ำครั้งแรก "99,14,12,43" ในครั้งที่สองและ "2,5,7,1" ในครั้งที่สาม


2
ใช้ดัชนีไม่ได้เหรอ
ev-br

คำตอบ:


227

เพียงแค่วนซ้ำเหนือการย้ายอาร์เรย์ของคุณ:

for column in array.T:
   some_function(column)

6
อะไรคือวิธีที่ดีในการรวมผลลัพธ์กลับเป็นอาร์เรย์เดียว
อิบราฮิมมูฮัมหมัด

47
สำหรับผู้ที่สงสัยarray.Tไม่ได้มีค่าใช้จ่ายสูงเพียง แต่เปลี่ยน 'ความก้าวหน้า' ของarray(ดูคำตอบนี้สำหรับการสนทนาที่น่าสนใจ)
drevicko

19

สิ่งนี้จะทำให้คุณเริ่มต้นได้

>>> for col in range(arr.shape[1]):
    some_function(arr[:,col])


[1 2 3 4]
[99 14 12 43]
[2 5 7 1]

7
มันดูไม่พีคสำหรับฉัน
gronostaj

@gronostaj แน่นอนมันเป็น Pythonic คุณจะแก้ปัญหานี้อย่างไรเมื่อคุณต้องการวนซ้ำบนแกนที่กำหนดเองของอาร์เรย์หลายมิติ
Neil G

1
@NeilG คำถามนี้เกี่ยวกับอาร์เรย์ 2 มิติอย่างเคร่งครัด
gronostaj

6

สำหรับอาร์เรย์สามมิติคุณสามารถลอง:

for c in array.transpose(1, 0, 2):
    do_stuff(c)

ดูเอกสารเกี่ยวกับวิธีการarray.transposeทำงาน โดยทั่วไปคุณกำลังระบุว่าจะเปลี่ยนมิติข้อมูลใด ในกรณีนี้เรากำลังเปลี่ยนมิติที่สอง (เช่นคอลัมน์) ไปยังมิติแรก



4

คุณยังสามารถใช้การเปิดเครื่องรูดเพื่อวนซ้ำผ่านคอลัมน์

for col in zip(*array):
   some_function(col)

2

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

mat2 = np.array([1,5,6,7,3,0,3,5,9,10,8,0], dtype=np.float64).reshape(3, 4)

ฟังก์ชันสำหรับค่าเฉลี่ยคือ

def my_mean(x):
    return sum(x)/len(x)

เพื่อทำสิ่งที่จำเป็นและเก็บผลลัพธ์ใน 'ผลลัพธ์' เวกเตอร์โคลอน

results = np.zeros(4)
for i in range(0, 4):
    mat2[:, i] = my_mean(mat2[:, i])

results = mat2[1,:]      

ผลลัพธ์คืออาร์เรย์ ([4.33333333, 5. , 5.66666667, 4. ])


0

enumerateหรือคุณสามารถใช้ จะให้หมายเลขคอลัมน์และค่าคอลัมน์ด้วย

for num, column in enumerate(array.T):
    some_function(column) # column: Gives you the column value as asked in the question
    some_function(num) # num: Gives you the column number 

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