-1 অর্থহীন পুনরায় আকারের অর্থ কী?


419

প্যারামিটার -1 দিয়ে পুনরায় আকার ফাংশনটি ব্যবহার করে একটি নিম্পি ম্যাট্রিক্সকে ভেক্টরে পুনরায় আকার দেওয়া যেতে পারে। তবে আমি জানি না -1 এখানে কী বোঝায়।

উদাহরণ স্বরূপ:

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)

ফলাফল b:matrix([[1, 2, 3, 4, 5, 6, 7, 8]])

এখানে কেউ কী জানেন? এবং এটি পাইথন অ্যাসাইন -1 এর কয়েকটি অর্থ array[-1]বোঝায় যেমন: শেষ উপাদানটি বোঝায়। আপনি একটি ব্যাখ্যা দিতে পারেন?

উত্তর:


565

নতুন আকৃতি সরবরাহের জন্য সন্তুষ্ট করার মানদণ্ডটি হ'ল 'নতুন আকারটি মূল আকারের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত'

নম্পি আমাদের নতুন আকারের প্যারামিটারগুলির একটি -1 হিসাবে দিতে দেয় (যেমন: (2, -1) বা (-1,3) তবে (-1, -1)) নয়। এর সহজ অর্থ হ'ল এটি একটি অজানা মাত্রা এবং আমরা এটি নির্ধারণের জন্য আঙ্গুল চাই। এবং নম্পি 'অ্যারের দৈর্ঘ্য এবং অবশিষ্ট মাত্রাগুলি' দেখে এবং এটি উল্লিখিত মানদণ্ডকে সন্তুষ্ট করেছে কিনা তা নিশ্চিত করে এটি নির্ধারণ করবে

এখন উদাহরণ দেখুন।

z = np.array([[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 10, 11, 12]])
z.shape
(3, 4)

এখন (-1) দিয়ে পুনরায় আকার দেওয়ার চেষ্টা করছি। ফলাফলের নতুন আকারটি (12,) এবং মূল আকারের সাথে সামঞ্জস্যপূর্ণ (3,4)

z.reshape(-1)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

এখন (-1, 1) দিয়ে পুনরায় আকার দেওয়ার চেষ্টা করছি। আমরা কলামটি 1 হিসাবে সরবরাহ করেছি কিন্তু সারিগুলি অজানা হিসাবে। সুতরাং আমরা ফলাফলটি নতুন আকার হিসাবে পেয়েছি (12, 1)। মূল আকারের সাথে সামঞ্জস্যপূর্ণ হন (3,4)

z.reshape(-1,1)
array([[ 1],
   [ 2],
   [ 3],
   [ 4],
   [ 5],
   [ 6],
   [ 7],
   [ 8],
   [ 9],
   [10],
   [11],
   [12]])

উপরোক্ত numpyপরামর্শ / ত্রুটি বার্তার সাথে সামঞ্জস্যপূর্ণ , reshape(-1,1)একক বৈশিষ্ট্যের জন্য ব্যবহার করতে ; অর্থাত্ একক কলাম

আপনার ডেটাতে array.reshape(-1, 1)যদি একক বৈশিষ্ট্য থাকে তবে তা ব্যবহার করে আপনার ডেটা পুনরায় আকার দিন

(-1, 2) হিসাবে নতুন আকার। সারি অজানা, কলাম 2। আমরা ফলাফলটি নতুন আকার হিসাবে পাই (6, 2)

z.reshape(-1, 2)
array([[ 1,  2],
   [ 3,  4],
   [ 5,  6],
   [ 7,  8],
   [ 9, 10],
   [11, 12]])

এখন অজানা হিসাবে কলাম রাখার চেষ্টা করছি। নতুন আকার (1, -1) হিসাবে। অর্থাত্, সারিটি 1, কলাম অজানা। আমরা ফলাফলটি নতুন আকার হিসাবে পেয়েছি (1, 12)

z.reshape(1,-1)
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]])

উপরের numpyপরামর্শ / ত্রুটির বার্তার সাথে সামঞ্জস্যপূর্ণ , reshape(1,-1)একক নমুনার জন্য ব্যবহার করতে ; অর্থাত্ একক সারি

array.reshape(1, -1)এতে যদি কোনও একক নমুনা থাকে তবে এটি ব্যবহার করে আপনার ডেটা পুনরায় আকার দিন

নতুন আকার (2, -1)। সারি 2, কলাম অজানা। আমরা ফলাফলটি নতুন আকার হিসাবে পাই (2,6)

z.reshape(2, -1)
array([[ 1,  2,  3,  4,  5,  6],
   [ 7,  8,  9, 10, 11, 12]])

নতুন আকার (3, -1)। সারি 3, কলাম অজানা। আমরা ফলাফল হিসাবে নতুন আকার পেতে (3,4)

z.reshape(3, -1)
array([[ 1,  2,  3,  4],
   [ 5,  6,  7,  8],
   [ 9, 10, 11, 12]])

এবং পরিশেষে, যদি আমরা উভয় মাত্রা অজানা হিসাবে অর্থাত নতুন আকার (-1, -1) হিসাবে সরবরাহ করার চেষ্টা করি। এটি একটি ত্রুটি নিক্ষেপ করবে

z.reshape(-1, -1)
ValueError: can only specify one unknown dimension

9
এই উত্তরে প্রচুর উদাহরণ রয়েছে তবে সরল ইংরেজিতে -1 কী দেয় তা নির্দিষ্ট করে দেয় না। একটি অ্যারে পুনরায় আকার দেওয়ার সময়, নতুন আকারে পুরানো আকারের মতো একই সংখ্যক উপাদান থাকতে হবে, যার অর্থ দুটি আকারের মাত্রার পণ্যগুলি সমান হতে হবে। -1 ব্যবহার করার সময়, -1 এর সাথে সম্পর্কিত মাত্রাটি একই অ্যারের reshapeউপাদানগুলি বজায় রাখার জন্য প্রদত্ত মাত্রাগুলি দ্বারা বিভক্ত মূল অ্যারের মাত্রাগুলির পণ্য হবে ।
বলপয়েন্টবেন 20

1
আমার মতে গৃহীত উত্তর এবং এই উত্তর উভয়ই সহায়ক, যদিও স্বীকৃত উত্তরটি আরও সহজ, আমি সহজ উত্তরটি পছন্দ করি
ক্লাউডসম্পিউটস

1
আকৃতিটি (12, 1) "আকারের সাথে সামঞ্জস্যপূর্ণ" (3,4) কীভাবে?
বিজেন্দ্র

1
@ ভিজেন্ডার আমি অনুমান করি এর অর্থ একই সংখ্যক উপাদান তবে ভিন্ন অক্ষ - অর্থাৎ 12x1 == 3x4?
ডেভিড ওয়াটারওয়ার্থ

80

একটি অ্যারে পুনরায় আকার দিতে ব্যবহৃত হয়।

বলুন আমাদের কাছে 3 x 10 x 10 মাত্রার মাত্রিক অ্যারে রয়েছে:

r = numpy.random.rand(2, 10, 10) 

এখন আমরা 5 এক্স 5 এক্স 8 এ পুনরায় আকার দিতে চাই:

numpy.reshape(r, shape=(5, 5, 8)) 

কাজ করবে

মনে রাখবেন, একবার আপনি প্রথম ধাপ = 5 এবং দ্বিতীয় ম্লান = 5 ঠিক করে ফেললে আপনার তৃতীয় মাত্রা নির্ধারণ করার দরকার নেই। আপনার অলসতায় সহায়তা করার জন্য পাইথন -1 বিকল্পটি দেয়:

numpy.reshape(r, shape=(5, 5, -1)) 

আপনাকে আকৃতির একটি অ্যারে = (5, 5, 8) দেবে।

একইভাবে,

numpy.reshape(r, shape=(50, -1)) 

আপনাকে আকৃতির একটি অ্যারে প্রদান করবে = (50, 4)

আপনি http://anie.me/numpy-reshape-transpose-theano-dimshuffle/ এ আরও পড়তে পারেন


59

মতে the documentation:

নিউজ শেপ: ইনট বা টিপল ইনটস

নতুন আকারটি মূল আকারের সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। যদি কোনও পূর্ণসংখ্যা হয়, তবে ফলাফলটি দৈর্ঘ্যের 1-ডি অ্যারে হবে। এক আকৃতির মাত্রা -1 হতে পারে । এই ক্ষেত্রে, অ্যারের দৈর্ঘ্য এবং অবশিষ্ট মাত্রাগুলি থেকে মান নির্ধারণ করা হয়।


এই ক্ষেত্রে, মানটি অনুমান করা হয় [1, 8]। এবং 8 হ'ল মোট ম্যাট্রিক্স সংখ্যা number ঠিক আছে?
ব্যবহারকারী 2262504

@ ব্যবহারকারী 2262504, আমি নিশ্চিত নই আমি মনে করি মান নির্ধারিত [8]কারণ ডকুমেন্টেশনটি তাই বলে ( 1-D array)। ব্যবহার করে দেখুন numpy.reshape(a, [8])। এটি numpy.reshape(a, [1,8])ম্যাট্রিক্সের সাথে একই ফলাফল দেয়।
ফলসেট্রু

3
-1 ফলস্বরূপ ম্যাট্রিক্সে অজানা সংখ্যক কলাম বা সারিগুলির জন্য নির্ধারণ করতে দেয় 1 দ্রষ্টব্য: অজানা উভয়ই নয় কলাম বা সারি হওয়া উচিত।
গাথাইড

15

numpy.reshape (একটি, নিউজ শেপ, অর্ডার {}) আরও তথ্যের জন্য নীচের লিঙ্কটি চেক করুন। https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

নীচের উদাহরণের জন্য আপনি উল্লেখ করেছেন আউটপুট ফলাফল ভেক্টরকে একটি একক সারি হিসাবে ব্যাখ্যা করে। (- 1) সারিগুলির সংখ্যা 1 হতে নির্দেশ করে

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)

আউটপুট:

ম্যাট্রিক্স ([[1, 2, 3, 4, 5, 6, 7, 8]])

এটি আরও একটি উদাহরণের সাথে আরও স্পষ্টভাবে ব্যাখ্যা করা যেতে পারে:

b = np.arange(10).reshape((-1,1))

আউটপুট: (একটি 1 মাত্রিক কলামার অ্যারে)

অ্যারে ([[0],

   [1],
   [2],
   [3],
   [4],
   [5],
   [6],
   [7],
   [8],
   [9]])

খ = এনপি.আরঙ্গ (10)। শেফ ((1, -1))

আউটপুট: (একটি 1 মাত্রিক সারি অ্যারে)

অ্যারে ([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])


12

এটি মোটামুটি বোঝা সহজ। "-1" এর অর্থ "অজানা মাত্রা" যা অন্য মাত্রা থেকে অনুমান করা উচিত। এই ক্ষেত্রে, আপনি যদি নিজের ম্যাট্রিক্সটি এইভাবে সেট করেন:

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])

আপনার ম্যাট্রিক্সটিকে এভাবে পরিবর্তন করুন:

b = numpy.reshape(a, -1)

এটি ম্যাট্রিক্স এ-তে কিছু ডিফল্ট ক্রিয়াকলাপ কল করবে, যা 1-ডি নিমপি অ্যারে / মার্ট্রিক্স প্রদান করবে।

তবে আমি মনে করি না যে এই জাতীয় কোড ব্যবহার করা ভাল ধারণা। কেন চেষ্টা করছ না:

b = a.reshape(1,-1)

এটি আপনাকে একই ফলাফল দেবে এবং পাঠকদের বুঝতে এটি আরও স্পষ্ট হবে: a কে অন্য আকার হিসাবে সেট করুন। একটির জন্য, আমরা এর কতগুলি কলাম থাকা উচিত (এটি -1 তে সেট করুন!) না, তবে আমরা 1-মাত্রিক অ্যারে চাই (প্রথম প্যারামিটারটিকে 1 তে সেট করুন!)।


9

দীর্ঘ গল্প সংক্ষিপ্ত : আপনি কিছু মাত্রা সেট করেছেন এবং নুমপিকে বাকি (গুলি) সেট করতে দিন।

(userDim1, userDim2, ..., -1) -->>

(userDim1, userDim1, ..., TOTAL_DIMENSION - (userDim1 + userDim2 + ...))

এটি ইংরেজিতে উত্তরটি আমি সন্ধান করছিলাম, সহজ এবং সরল। অর্থাত্ আপনি আপনার নকশাটিকে অগ্রাধিকার দিন, বাকি গণিতকে অলস কাজ করুন :)
সুমন্ত লাজারাস

6

এর সহজ অর্থ হ'ল আপনি কী সংখ্যক সারি বা কলাম দিতে পারবেন সে সম্পর্কে আপনি নিশ্চিত নন এবং আপনি পুনর্নির্মাণের জন্য কলাম বা সারিগুলির সংখ্যার পরামর্শ দিতে নকলকে জিজ্ঞাসা করছেন।

নামি -1-র জন্য শেষ উদাহরণ সরবরাহ করে https://docs.scipy.org/doc/numpy/references/generated/numpy.reshape.html এর

(-1) সম্পর্কে আরও ভালভাবে বুঝতে কোড এবং এর আউটপুট নীচে পরীক্ষা করুন:

কোড: -

import numpy
a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
print("Without reshaping  -> ")
print(a)
b = numpy.reshape(a, -1)
print("HERE We don't know about what number we should give to row/col")
print("Reshaping as (a,-1)")
print(b)
c = numpy.reshape(a, (-1,2))
print("HERE We just know about number of columns")
print("Reshaping as (a,(-1,2))")
print(c)
d = numpy.reshape(a, (2,-1))
print("HERE We just know about number of rows")
print("Reshaping as (a,(2,-1))")
print(d)

আউটপুট: -

Without reshaping  -> 
[[1 2 3 4]
 [5 6 7 8]]
HERE We don't know about what number we should give to row/col
Reshaping as (a,-1)
[[1 2 3 4 5 6 7 8]]
HERE We just know about number of columns
Reshaping as (a,(-1,2))
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
HERE We just know about number of rows
Reshaping as (a,(2,-1))
[[1 2 3 4]
 [5 6 7 8]]

2
import numpy as np
x = np.array([[2,3,4], [5,6,7]]) 

# Convert any shape to 1D shape
x = np.reshape(x, (-1)) # Making it 1 row -> (6,)

# When you don't care about rows and just want to fix number of columns
x = np.reshape(x, (-1, 1)) # Making it 1 column -> (6, 1)
x = np.reshape(x, (-1, 2)) # Making it 2 column -> (3, 2)
x = np.reshape(x, (-1, 3)) # Making it 3 column -> (2, 3)

# When you don't care about columns and just want to fix number of rows
x = np.reshape(x, (1, -1)) # Making it 1 row -> (1, 6)
x = np.reshape(x, (2, -1)) # Making it 2 row -> (2, 3)
x = np.reshape(x, (3, -1)) # Making it 3 row -> (3, 2)

0

রূপান্তরটির চূড়ান্ত ফলাফলটি হ'ল চূড়ান্ত অ্যারেতে উপাদানগুলির সংখ্যা প্রাথমিক অ্যারে বা ডেটা ফ্রেমের মতো।

-1 সারি বা কলামের অজানা গণনার সাথে সম্পর্কিত। আমরা এটিকে x(অজানা) হিসাবে ভাবতে পারি । x-1 দিয়ে অর্ডার করা জোড়ার অন্যান্য মান দ্বারা মূল অ্যারেতে উপাদানগুলির ওম্বারকে ভাগ করে প্রাপ্ত হয়।

উদাহরণ

পুনঃসাপণীয় (-1,1) সহ 12 টি উপাদান x= 12/1 = 12 সারি এবং 1 কলামের সাথে একটি অ্যারের সাথে মিল রয়েছে ।


পুনরায় আকারের (12, 1 -1) সহ 12 টি উপাদান 1 সারি এবং x= 12/1 = 12 কলামের সাথে একটি অ্যারের সাথে সম্পর্কিত ।

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