রুবির দুটি অ্যারে থেকে ম্যাপিং মান

আমি পিঠনের সাথে নীচের কি কি করতে পারি এমন একটি পথ আছে তা ভাবছি, রুবিতে:

sum = reduce(lambda x, y: x + y, map(lambda x, y: x * y, weights, data))

আমি ওজন এবং তথ্য সঙ্গে সমান আকারের দুটি অ্যারে আছে কিন্তু আমি রুবি মধ্যে মানচিত্র অনুরূপ একটি ফাংশন খুঁজে পাওয়া যায় না, আমি কাজ আছে কমাতে।

0
ro fr hi

6 উত্তর

রুবি 1.9:

weights.zip(data).map{|a,b| a*b}.reduce(:+)

রুবি 1.8:

weights.zip(data).inject(0) {|sum,(w,d)| sum + w*d }
0
যোগ
weights = [1,2,3]
data    = [10,50,30]

require 'matrix'
Vector[*weights].inner_product Vector[*data] # => 200 
0
যোগ

@ মিখিয়েল দে মারে

আপনার রুবি 1.9 উদাহরণ আরো একটু সংক্ষিপ্ত করা যাবে:

weights.zip(data).map(:*).reduce(:+)

এছাড়াও ruby 1.8 এর মধ্যে উল্লেখ্য, যদি আপনি ActiveSupport (Rails থেকে) ব্যবহার করতে পারেন তবে আপনি ব্যবহার করতে পারেন:

weights.zip(data).map(&:*).reduce(&:+)
0
যোগ
@ ফিলিক্স রাবে: মনে হচ্ছে রুবি পরিবর্তিত হয়েছে কিভাবে এই ধরণের প্রজেক্টে আর্গুমেন্টগুলি পরিচালিত হয়। আমি সত্যিই কিছু বিবরণ জানি না, কারণ আমি কয়েক বছরের মধ্যে রুবি স্পর্শ না।
যোগ লেখক Kevin Ballard, উৎস
রুবি 1.9.3 (আর্গুমেন্ট এন্টার) এ আমার জন্য কাজ করে না: [1,2,3] .zip ([4,5,6])। মানচিত্র (: *)
যোগ লেখক Felix Rabe, উৎস

রুবি একটি <�কোড> মানচিত্র </কোড> পদ্ধতি (a.k.a. সংগ্রহ </কোড> পদ্ধতি) যা গণনীয় </কোড> বস্তুতে প্রয়োগ করা যেতে পারে। যদি সংখ্যার </কোড> হয় সংখ্যাগুলির একটি অ্যারে, রুবি নিম্নলিখিত লাইন:

numbers.map{|x| x + 5}

পাইথনের নিম্নলিখিত রেখার সমতূল্য:

map(lambda x: x + 5, numbers)

আরও বিস্তারিত জানার জন্য, এখানে বা এখানে

0
যোগ

Array.zip ফাংশন অ্যারেগুলির একটি উপাদান অনুসারে সংমিশ্রণ করে। এটি পাইথন সিনট্যাক্স হিসাবে বেশ পরিষ্কার নয়, কিন্তু এখানে একটি পদ্ধতি যা আপনি ব্যবহার করতে পারেন:

weights = [1, 2, 3]
data = [4, 5, 6]
result = Array.new
a.zip(b) { |x, y| result << x * y } # For just the one operation

sum = 0
a.zip(b) { |x, y| sum += x * y } # For both operations
0
যোগ

মানচিত্রের জন্য একটি বিকল্প যা আরও ২ টি এরেস এর জন্য কাজ করে:

def dot(*arrays)
  arrays.transpose.map {|vals| yield vals}
end

dot(weights,data) {|a,b| a*b} 

# OR, if you have a third array

dot(weights,data,offsets) {|a,b,c| (a*b)+c}

এটি অ্যারেতেও যোগ করা যেতে পারে:

class Array
  def dot
    self.transpose.map{|vals| yield vals}
  end
end

[weights,data].dot {|a,b| a*b}

#OR

[weights,data,offsets].dot {|a,b,c| (a*b)+c}
0
যোগ