আমার কাছে বিভিন্ন আকারের দুটি স্তম্ভিত অ্যারে রয়েছে তবে একই দৈর্ঘ্যের সাথে (অগ্রণী মাত্রা)। আমি তাদের প্রত্যেককে বদলাতে চাই, যেমন আনুষঙ্গিক উপাদানগুলি ধারাবাহিকভাবে চলতে থাকে - অর্থাত্ তাদের শীর্ষস্থানীয় সূচকগুলিতে সম্মিলিতভাবে এগুলি পরিবর্তন করে।
এই কোডটি কাজ করে এবং আমার লক্ষ্যগুলি তুলে ধরে:
def shuffle_in_unison(a, b):
assert len(a) == len(b)
shuffled_a = numpy.empty(a.shape, dtype=a.dtype)
shuffled_b = numpy.empty(b.shape, dtype=b.dtype)
permutation = numpy.random.permutation(len(a))
for old_index, new_index in enumerate(permutation):
shuffled_a[new_index] = a[old_index]
shuffled_b[new_index] = b[old_index]
return shuffled_a, shuffled_b
উদাহরণ স্বরূপ:
>>> a = numpy.asarray([[1, 1], [2, 2], [3, 3]])
>>> b = numpy.asarray([1, 2, 3])
>>> shuffle_in_unison(a, b)
(array([[2, 2],
[1, 1],
[3, 3]]), array([2, 1, 3]))
যাইহোক, এটি ক্লানকি, অদক্ষ এবং ধীরে ধীরে অনুভূত হয় এবং এর অ্যারেগুলির একটি অনুলিপি তৈরি করা দরকার - আমি বরং এগুলি স্থানটিতে স্থানান্তরিত করব, কারণ তারা বেশ বড় হবে be
এই সম্পর্কে আরও ভাল উপায় আছে? দ্রুত সম্পাদন এবং কম স্মৃতি ব্যবহার আমার প্রাথমিক লক্ষ্য, তবে মার্জিত কোডটিও খুব সুন্দর।
অন্য একজন ভেবেছিল আমার এই ছিল:
def shuffle_in_unison_scary(a, b):
rng_state = numpy.random.get_state()
numpy.random.shuffle(a)
numpy.random.set_state(rng_state)
numpy.random.shuffle(b)
এটি কাজ করে ... তবে এটি কিছুটা ভীতিজনক, যেমন আমি দেখছি এটি কাজ চালিয়ে যাবে তার সামান্য গ্যারান্টি - এটি উদাসীন সংস্করণ জুড়ে বেঁচে থাকার নিশ্চয়তার মতো জিনিসটির মতো লাগে না।