পাইথন নিম্পি মান মান: অপারেশনগুলি আকারের সাথে একসাথে সম্প্রচার করা যায়নি


126

Numpy, আমি, দুই "অ্যারে" have Xহয় (m,n)এবং yএকটি ভেক্টর হয়(n,1)

ব্যবহার

X*y

আমি ত্রুটি পাচ্ছি

ValueError: operands could not be broadcast together with shapes (97,2) (2,1) 

যখন (97,2)x(2,1)স্পষ্টভাবে আইনী ম্যাট্রিক্স অপারেশন হয় এবং আমাকে একটি (97,1)ভেক্টর দেওয়া উচিত

সম্পাদনা করুন:

আমি এটি ব্যবহার করে সংশোধন করেছি X.dot(y)তবে মূল প্রশ্নটি এখনও রয়ে গেছে।


2
"আসল প্রশ্ন" কী? X*yকাজ করা উচিত নয় (এবং এটি কাজ করে না), np.dot(X,y)এবং X.dot(y))তাদের কাজ করা উচিত (এবং আমার জন্য তারা করে)।
ডিএসএম

3
*ndarrayবস্তুর জন্য ম্যাট্রিক্স গুণ নয় lic
ব্যবহারকারী 2357112

ডাব্লুটিটি * এক্স সমাধান করার সময় আমি একই সমস্যার মধ্যে পড়েছিলাম, যখন এটি এনপি.ডট (ডাব্লুটি, এক্স) হওয়া উচিত
হুয়ান জামোরা

এক্স * ওয়াই মৌলিক গুণগত গুণন করে
ভিক্টর জুয়ানাজি

উত্তর:


92

dotম্যাট্রিক্সের গুণ, তবে *অন্য কিছু করে।

আমাদের দুটি অ্যারে রয়েছে:

  • X, আকৃতি (97,2)
  • y, আকৃতি (2,1)

নম্পি অ্যারে, অপারেশন সহ

X * y

উপাদান অনুসারে সম্পন্ন হয়, তবে এক বা দুটি মান উভয়ই এক বা একাধিক মাত্রায় প্রসারিত করে সামঞ্জস্যপূর্ণ করতে পারে। এই অপারেশনটিকে সম্প্রচার বলা হয়। আকার যেখানে 1 বা যেটি অনুপস্থিত রয়েছে সেগুলি সম্প্রচারে ব্যবহার করা যেতে পারে।

উপরের উদাহরণে মাত্রাগুলি বেমানান, কারণ:

97   2
 2   1

এখানে প্রথম মাত্রায় বিরোধী সংখ্যা রয়েছে (97 এবং 2)। উপরের ভ্যালুরইরারের অভিযোগ এটি। দ্বিতীয় মাত্রা ঠিক হবে, কারণ 1 নম্বর কোনও কিছুর সাথে বিরোধ করে না conflict

সম্প্রচারের বিধি সম্পর্কে আরও তথ্যের জন্য: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

(দয়া করে নোট করুন Xএবং yযদি এটি টাইপ হয় numpy.matrix, তবে অস্ট্রিকটি ম্যাট্রিক্সের গুণক হিসাবে ব্যবহার করা যেতে পারে My আমার প্রস্তাবটি এড়ানো থেকে দূরে রাখা numpy.matrix, এটি জিনিসগুলিকে সরলীকরণের চেয়ে আরও জটিল করে তোলে))

আপনার অ্যারে দিয়ে ভাল হতে হবে numpy.dot; আপনি যদি কোনও ত্রুটি পেয়ে থাকেন তবে আপনার numpy.dotঅবশ্যই অন্য কিছু বাগ থাকতে হবে। আকারগুলি যদি ভুল হয় তবে numpy.dotআপনি আলাদা ব্যতিক্রম পান:

ValueError: matrices are not aligned

আপনি যদি এখনও এই ত্রুটিটি পান তবে দয়া করে সমস্যার একটি সর্বনিম্ন উদাহরণ পোস্ট করুন। আপনার মতো অ্যারের আকারের একটি উদাহরণ গুণফল সফল হয়:

In [1]: import numpy

In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)

34

প্রতি নকল ডক্স :

দুটি অ্যারেতে অপারেটিং করার সময়, নুমপি তাদের আকারের উপাদান-উপাদানগুলির সাথে তুলনা করে। এটি পিছনের মাত্রা দিয়ে শুরু হয় এবং এগিয়ে যাওয়ার পথে কাজ করে। দুটি মাত্রা সামঞ্জস্যপূর্ণ যখন:

  • তারা সমান, বা
  • এর মধ্যে একটি হ'ল ১

অন্য কথায়, যদি আপনি সংখ্যাবৃদ্ধি দুটি ম্যাট্রিক্সের করার চেষ্টা করছেন (রৈখিক বীজগণিত অর্থে) তাহলে আপনি চান X.dot(y)কিন্তু যদি আপনি ম্যাট্রিক্স থেকে ব্রডকাস্ট scalars করার চেষ্টা করছেন yসম্মুখের Xতারপর আপনি যে কাজটি করার প্রয়োজন X * y.T

উদাহরণ:

>>> import numpy as np
>>>
>>> X = np.arange(8).reshape(4, 2)
>>> y = np.arange(2).reshape(1, 2)  # create a 1x2 matrix
>>> X * y
array([[0,1],
       [0,3],
       [0,5],
       [0,7]])

11

এটি সম্ভবত যে ত্রুটিটি বিন্দু পণ্যটিতে না ঘটেছিল, তবে পরে। উদাহরণস্বরূপ এটি চেষ্টা করুন

a = np.random.randn(12,1)
b = np.random.randn(1,5)
c = np.random.randn(5,12)
d = np.dot(a,b) * c

np.dot (a, b) ভাল হবে; তবে এনপি.ডট (ক, খ) * সি স্পষ্টত ভুল (12x1 এক্স 1x5 = 12x5 যা উপাদান অনুসারে 5x12 গুণ করতে পারে না) তবে ন্যালি আপনাকে দেবে

ValueError: operands could not be broadcast together with shapes (12,1) (1,5)

ত্রুটি বিভ্রান্তিকর; তবে এই লাইনে একটি সমস্যা আছে।


1
ত্রুটি বার্তাটি প্রকৃতপক্ষে বিভ্রান্তিমূলক, কারণ যখন আপনার ম্যাট্রিক্সের মাত্রাগুলি উপাদান অনুসারে গুণনের জন্য ভুল হয় তখন এটি প্রদর্শিত হয়।
অং হেতেট


7

আপনি খুঁজছেন np.matmul(X, y)। পাইথন 3.5+ এ আপনি ব্যবহার করতে পারেন X @ y


0

আমরা নিজেদের বিভ্রান্ত করতে পারি যে একটি * বি একটি বিন্দু পণ্য।

তবে বাস্তবে তা প্রচারিত হয়।

ডট পণ্য: a.dot (খ)

ব্রডকাস্ট:

ব্রডকাস্টিং শব্দটি বোঝায় যে কীভাবে অংকিত গাণিতিক ক্রিয়াকলাপগুলির সময় বিভিন্ন মাত্রার সাথে অ্যারে আচরণ করে যা কিছু নির্দিষ্ট সীমাবদ্ধতার দিকে পরিচালিত করে, ছোট অ্যারেটি বৃহত্তর অ্যারে জুড়ে সম্প্রচারিত হয় যাতে তাদের সুসংগত আকার থাকে।

(এম, এন) + - / * (1, এন) → (এম, এন): এম সারিগুলিতে অপারেশন প্রয়োগ করা হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.