একটি 1D অ্যারেকে নিম্পিতে 2D অ্যারে রূপান্তর করুন


118

2D অ্যারেতে কলামগুলির সংখ্যা উল্লেখ করে আমি 1-মাত্রিক অ্যারেটিকে 2-মাত্রিক অ্যারেতে রূপান্তর করতে চাই। এমন কিছু যা এইরকম কাজ করবে:

> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
       [3, 4],
       [5, 6]])

নিম্পির কি এমন কোনও ফাংশন রয়েছে যা আমার তৈরি আপ ফাংশন "vec2matrix" এর মতো কাজ করে? (আমি বুঝতে পারি যে আপনি 2D অ্যারের মতো 1D অ্যারে সূচক করতে পারেন, তবে আমার কাছে কোডটি কোনও বিকল্প নয় - আমার এই রূপান্তরটি করা দরকার))

উত্তর:


163

আপনি reshapeঅ্যারে করতে চান ।

B = np.reshape(A, (-1, 2))

যেখানে -1ইনপুট অ্যারের আকার থেকে নতুন মাত্রার আকার নির্ধারণ করে।


44

আপনার দুটি বিকল্প রয়েছে:

  • আপনি যদি আর আসল আকৃতিটি না চান তবে সবচেয়ে সহজ হ'ল অ্যারেতে একটি নতুন আকার নির্ধারণ করা

    a.shape = (a.size//ncols, ncols)

    যথাযথ আকারটি স্বয়ংক্রিয়ভাবে গণনা করতে আপনি a.size//ncolsবাই স্যুইচ করতে পারেন -1। তা নিশ্চিত করুন a.shape[0]*a.shape[1]=a.size, অন্যথায় আপনি কিছু সমস্যা হয়ে উঠবেন।

  • আপনি np.reshapeফাংশনটির সাথে একটি নতুন অ্যারে পেতে পারেন , যা বেশিরভাগ উপরে উপস্থাপিত সংস্করণটির মতো কাজ করে

    new = np.reshape(a, (-1, ncols))

    এটি সম্ভব হলে, newপ্রাথমিক অ্যারের কেবলমাত্র একটি দৃশ্য হবে a, যার অর্থ ডেটা ভাগ করা are কিছু ক্ষেত্রে, newঅ্যারে পরিবর্তে আকপি হবে। মনে রাখবেন যে np.reshapeএকটি alচ্ছিক কীওয়ার্ড গ্রহণ করে orderযা আপনাকে সারি-প্রধান সি অর্ডার থেকে কলাম-প্রধান ফোর্ত্রান ক্রমে স্যুইচ করতে দেয়। পদ্ধতিটির np.reshapeফাংশন সংস্করণ a.reshape

আপনি যদি প্রয়োজনটিকে সম্মান করতে না পারেন তবে আপনি a.shape[0]*a.shape[1]=a.sizeএকটি নতুন অ্যারে তৈরি করে আটকে গেছেন। আপনি ব্যবহার করতে পারেন np.resizeফাংশন এবং সঙ্গে এটি মিশিয়ে np.reshapeযেমন

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)

9

এর মতো কিছু চেষ্টা করুন:

B = np.reshape(A,(-1,ncols))

আপনাকে নিশ্চিত করতে হবে যে আপনি নিজের অ্যারেতে উপাদানগুলির সংখ্যাটি এতক্ষণে ভাগ করতে পারবেন ncols। আপনি কীওয়ার্ডটি Bব্যবহার করে যে সংখ্যাগুলিতে টানা হয় সেটির সাথেও খেলতে পারেন order


4

যদি আপনার একমাত্র উদ্দেশ্য 1d অ্যারে এক্সকে 2 ডি অ্যারে রূপান্তর করা হয় তবে কেবল এটি করুন:

X = np.reshape(X,(1, X.size))

0
import numpy as np
array = np.arange(8) 
print("Original array : \n", array)
array = np.arange(8).reshape(2, 4)
print("New array : \n", array)

1
আপনি কোড সহ কিছু ব্যাখ্যা অন্তর্ভুক্ত করা ভাল।
সিড

আপনার উত্তরটি কীভাবে পূর্বের এবং উপরের অন্যান্য উত্তরগুলির চেয়ে পৃথক, কীভাবে এনপি.আরেশেপ ব্যবহার করে তা ব্যাখ্যা করতে পারেন?
বোকা ওল্ফ

0
some_array.shape = (1,)+some_array.shape

বা একটি নতুন পেতে

another_array = numpy.reshape(some_array, (1,)+some_array.shape)

এটি +1 মাত্রা তৈরি করবে, বহির্মুখী একটি বন্ধনী যুক্ত করার সমান


-1

আপনি flatten()নমপি প্যাকেজ থেকে ব্যবহার করতে পারেন ।

import numpy as np
a = np.array([[1, 2],
       [3, 4],
       [5, 6]])
a_flat = a.flatten()
print(f"original array: {a} \nflattened array = {a_flat}")

আউটপুট:

original array: [[1 2]
 [3 4]
 [5 6]] 
flattened array = [1 2 3 4 5 6]

AttributeError: module 'numpy' has no attribute 'flatten'
জেমি এফ

1
আপনি কি আপনার কোড ভাগ করতে পারেন? কারণ নামী শিওর এর flattenপদ্ধতি রয়েছে: ডকস.সসিপি.আর
রাফি

-2

নম্পি ব্যবহার না করে 1D অ্যারে 2D অ্যারেতে পরিবর্তন করুন।

l = [i for i in range(1,21)]
part = 3
new = []
start, end = 0, part


while end <= len(l):
    temp = []
    for i in range(start, end):
        temp.append(l[i])
    new.append(temp)
    start += part
    end += part
print("new values:  ", new)


# for uneven cases
temp = []
while start < len(l):
    temp.append(l[start])
    start += 1
    new.append(temp)
print("new values for uneven cases:   ", new)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.