নম্পি অ্যারের কলামগুলিতে পুনরাবৃত্তি কিভাবে?


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
আপনি কি কোনও সূচক ব্যবহার করতে পারবেন না --- স্ট্যাকওভারফ্লো.com
৪৪৫৫০76

উত্তর:


225

আপনার অ্যারে স্থানান্তরিত সম্পর্কে পুনরাবৃত্তি করুন:

for column in array.T:
   some_function(column)

6
একক অ্যারেতে ফলাফলটি একত্রিত করার ভাল উপায় কী হবে?
ইব্রাহিম মুহাম্মদ

46
যারা ভাবছেন তাদের array.Tপক্ষে ব্যয়বহুল নয়, কারণ এটি কেবল ' array
ধাপে

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
এটি আমার কাছে অজগর দেখায় না।
গ্রোনস্টাজ

@ গ্রনোস্টাজ অবশ্যই এটি পাইথোনিক। আপনি যখন বহুমাত্রিক অ্যারের একটি নির্বিচার অক্ষের উপর পুনরাবৃত্তি করতে চান তখন আপনি কীভাবে এই সমস্যাটি সমাধান করবেন?
নীল জি

1
@ নীলজি এই প্রশ্নটি দ্বি-মাত্রিক অ্যারে সম্পর্কে কঠোর।
গ্রোনস্টাজ

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,:]      

ফলাফলগুলি হ'ল: অ্যারে ([৪.৩৩৩৩৩৩৩33, ৫, ৫.66666666666667, ৪])


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.