আমি কীভাবে নম্পপিতে একটি ফাঁকা অ্যারে / ম্যাট্রিক্স তৈরি করব?


310

আমি সাধারণত কোনও তালিকা ব্যবহার করব এমনভাবে কীভাবে অ্যারে বা ম্যাট্রিক্স ব্যবহার করব তা আমি বুঝতে পারি না। আমি একটি খালি অ্যারে (বা ম্যাট্রিক্স) তৈরি করতে চাই এবং তারপরে এটিতে একবারে একটি কলাম (বা সারি) যুক্ত করতে চাই।

এই মুহুর্তে আমি কেবল এটির মতো উপায় খুঁজে পাচ্ছি:

mat = None
for col in columns:
    if mat is None:
        mat = col
    else:
        mat = hstack((mat, col))

যদিও এটি একটি তালিকা থাকলে আমি এই জাতীয় কিছু করব:

list = []
for item in data:
    list.append(item)

NumPy অ্যারে বা ম্যাট্রিকেসের জন্য এই জাতীয় স্বরলিপি ব্যবহার করার কোনও উপায় আছে কি ?

উত্তর:


440

NumPy কে দক্ষতার সাথে ব্যবহার করার জন্য আপনার কাছে ভুল মানসিক মডেল রয়েছে। NumPy অ্যারে মেমরির সংলগ্ন ব্লকগুলিতে সঞ্চিত হয়। আপনি যদি বিদ্যমান অ্যারেটিতে সারি বা কলামগুলি যুক্ত করতে চান তবে সম্পূর্ণ অ্যারেটিকে মেমরির একটি নতুন ব্লকে অনুলিপি করতে হবে, নতুন উপাদানগুলির সঞ্চয় করার জন্য ফাঁক তৈরি করে। যদি অ্যারে তৈরি করতে বারবার করা হয় তবে এটি খুব অদক্ষ।

সারি যুক্ত করার ক্ষেত্রে, আপনার সেরা বাজি হ'ল এমন একটি অ্যারে তৈরি করা যা আপনার ডেটা সেটটি শেষ পর্যন্ত হবে তার চেয়ে বড় এবং তারপরে সারি-সারি এটিতে ডেটা যুক্ত করুন:

>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])

123
আপনার অ্যারে শূন্য করার প্রয়োজন না থাকলে নামিপেম্পিটি ()ও রয়েছে।
জান্নেব

21
শূন্য () ওপরে খালি () ব্যবহার করে কী লাভ?
Zach

45
আপনি যদি সরাসরি আপনার ডেটা দিয়ে এটি সূচনা করতে চলেছেন তবে আপনি এটি শূন্য করার ব্যয়টি সাশ্রয় করবেন।
মার্কোরোসি

16
@ মারাকোরোসি তাই এর .empty()মানে হল যে কোনও একটি কোষে এলোমেলো মান খুঁজে পেতে পারে তবে অ্যারের সাথে উদাহরণের চেয়ে আরও দ্রুত তৈরি হয় .zeros()?
ব্যবহারকারী 3085931

6
@ ব্যবহারকারী 3085931 হ্যাঁ!
নাথান

98

একটি NumPy অ্যারে একটি তালিকা থেকে খুব আলাদা ডেটা কাঠামো এবং বিভিন্ন উপায়ে ব্যবহার করার জন্য ডিজাইন করা হয়েছে। আপনার ব্যবহার hstackসম্ভাব্যভাবে খুব অকার্যকর ... আপনি যখনই এটি কল করবেন তখনই বিদ্যমান অ্যারের সমস্ত ডেটা একটি নতুন কপি করা হবে। ( appendফাংশনটিতে একই সমস্যা থাকবে)) আপনি যদি একবারে নিজের ম্যাট্রিক্সের একটি কলাম তৈরি করতে চান, এটি শেষ না হওয়া পর্যন্ত আপনি এটি তালিকায় রাখা ভাল and

যেমন


mylist = []
for item in data:
    mylist.append(item)
mat = numpy.array(mylist)

itemএকটি তালিকা, একটি অ্যারে বা যেকোন পুনরাবৃত্তিযোগ্য হতে পারে, যতক্ষণ না প্রত্যেকের itemউপাদানগুলির সংখ্যা একই থাকে।
এই বিশেষ ক্ষেত্রে ( dataম্যাট্রিক্স কলামগুলি ধরে রাখা কিছুটা পুনরাবৃত্তিযোগ্য) আপনি সহজেই ব্যবহার করতে পারেন


mat = numpy.array(data)

(আরও মনে রাখবেন যে listভেরিয়েবলের নাম হিসাবে ব্যবহার করা সম্ভবত ভাল অনুশীলন নয়, কারণ এটি সেই নামে অন্তর্নির্মিত ধরণের মুখোশ দেয়, যা বাগের দিকে নিয়ে যেতে পারে))

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

যদি কোনও কারণে আপনি সত্যিই একটি খালি অ্যারে তৈরি করতে চান তবে আপনি কেবল ব্যবহার করতে পারেন numpy.array([]), তবে এটি খুব কমই কার্যকর!


1
স্তন্যপায়ী অ্যারে / ম্যাট্রিকগুলি মাতলাব থেকে পৃথকভাবে আলাদা?
লেভেস্ক

1
কোনো কারণে আপনি একটি খালি অ্যারে সংজ্ঞায়িত করতে, কিন্তু নির্দিষ্ট প্রস্থ (যেমন সঙ্গে প্রয়োজন np.concatenate()), আপনি ব্যবহার করতে পারেন: np.empty((0, some_width))। 0, যাতে আপনার প্রথম অ্যারে আবর্জনা হবে না।
নিউজসঙ্গুইস

56

নম্পপিতে একটি খালি বহুমাত্রিক অ্যারে তৈরি করতে (যেমন m*nআপনার ম্যাট্রিক্স সংরক্ষণের জন্য একটি 2 ডি অ্যারে ), আপনি যদি না জানেন mযে আপনি কতগুলি সারি যুক্ত করবেন এবং স্টিফেন সিমন্স উল্লিখিত গণনা ব্যয় সম্পর্কে যত্ন নেবেন না (যথা পুনরায় বিল্ডিং করা হবে) প্রতিটি পরিশেষে যোগ) এ অ্যারে, আপনি 0 মাত্রা যা আপনি সংযুক্ত করতে চান আলিঙ্গন করতে পারেন: X = np.empty(shape=[0, n])

এইভাবে আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন (এখানে m = 5আমরা ধরে নিই যে খালি ম্যাট্রিক্স তৈরি করার সময় আমরা জানতাম না এবং n = 2):

import numpy as np

n = 2
X = np.empty(shape=[0, n])

for i in range(5):
    for j  in range(2):
        X = np.append(X, [[i, j]], axis=0)

print X

যা আপনাকে দেবে:

[[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]
 [ 2.  0.]
 [ 2.  1.]
 [ 3.  0.]
 [ 3.  1.]
 [ 4.  0.]
 [ 4.  1.]]

1
এটি ওপিকে জিজ্ঞাসা করা প্রশ্নের উত্তর হওয়া উচিত, এমন ব্যবহারের ক্ষেত্রে যেখানে আপনি # কৌতুক আগেই জানেন না বা 0 টি সারি রয়েছে এমন
কেসটি

26

আমি এটি অনেকটা দেখেছি কারণ আমার স্কুল প্রকল্পের একটিতে একটি সেট হিসাবে নম্পি.আররে ব্যবহার করার দরকার ছিল এবং খালি আরম্ভ করা দরকার ... স্ট্যাক ওভারফ্লোতে আমি এখানে কোনও প্রাসঙ্গিক উত্তর খুঁজে পাইনি, তাই আমি শুরু করেছি কিছু doodling।

# Initialize your variable as an empty list first
In [32]: x=[]
# and now cast it as a numpy ndarray
In [33]: x=np.array(x)

ফলাফলটি হবে:

In [34]: x
Out[34]: array([], dtype=float64)

সুতরাং আপনি নিম্নলিখিত হিসাবে একটি এনপি অ্যারে সরাসরি আরম্ভ করতে পারেন:

In [36]: x= np.array([], dtype=np.float64)

আশা করি এটা কাজে লাগবে.


এটি প্রশ্নের মতো অ্যারেগুলির জন্য কাজ করে না, তবে এটি ভেক্টরদের জন্য কার্যকর হতে পারে।
ডাইভনেেক্স

a=np.array([])ডিফল্ট বলে মনে হচ্ছেfloat64
পি i

7

আপনি সংযোজন ফাংশন ব্যবহার করতে পারেন। সারিগুলির জন্য:

>>> from numpy import *
>>> a = array([10,20,30])
>>> append(a, [[1,2,3]], axis=0)
array([[10, 20, 30],      
       [1, 2, 3]])

কলামগুলির জন্য:

>>> append(a, [[15],[15]], axis=1)
array([[10, 20, 30, 15],      
       [1, 2, 3, 15]])

সম্পাদনা
অবশ্যই অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, যতক্ষণ না আপনি ম্যাট্রিক্স / অ্যারেতে প্রতিটি সময় কিছু প্রসেসিং (উদাহরণস্বরূপ বিপরীতমুখী) করে থাকেন আপনি যতক্ষণ কোনও কিছু যুক্ত করেন, আমি কেবল একটি তালিকা তৈরি করব, এতে যুক্ত করবো এবং পরে এটিকে রূপান্তর করব অ্যারে।


3

আপনি যদি অ্যারের চূড়ান্ত আকারটি একেবারে না জানেন তবে আপনি এই জাতীয় অ্যারের আকারটি বাড়িয়ে দিতে পারেন:

my_arr = numpy.zeros((0,5))
for i in range(3):
    my_arr=numpy.concatenate( ( my_arr, numpy.ones((1,5)) ) )
print(my_arr)

[[ 1.  1.  1.  1.  1.]  [ 1.  1.  1.  1.  1.]  [ 1.  1.  1.  1.  1.]]
  • 0প্রথম লাইনে লক্ষ্য করুন ।
  • numpy.appendঅন্য বিকল্প। এটা কল numpy.concatenate

3

আপনি এটি জিরোর মতো কোনও ধরণের অ্যারে তৈরি করতে প্রয়োগ করতে পারেন:

a = range(5)
a = [i*0 for i in a]
print a 
[0, 0, 0, 0, 0]

4
আপনি যদি খাঁটি a= [0] * 5
অজগরটিতে

3

নাম্পিসগুলিকে আরও বেশি তালিকাগুলির মতো দেখতে তৈরি করার জন্য এখানে কিছু কর্মসূচি রয়েছে

np_arr = np.array([])
np_arr = np.append(np_arr , 2)
np_arr = np.append(np_arr , 24)
print(np_arr)

আউটপুট: অ্যারে ([২, ২৪.])


2

আপনি এটি কীসের জন্য ব্যবহার করছেন তার উপর নির্ভর করে আপনাকে ডেটা টাইপ নির্দিষ্ট করতে হবে ( 'dtype' দেখুন )।

উদাহরণস্বরূপ, 8-বিট মানগুলির 2D অ্যারে তৈরি করতে (একরঙা চিত্র হিসাবে ব্যবহারের জন্য উপযুক্ত):

myarray = numpy.empty(shape=(H,W),dtype='u1')

আরজিবি চিত্রের জন্য আকারে রঙিন চ্যানেলের সংখ্যা অন্তর্ভুক্ত করুন: shape=(H,W,3)

এছাড়াও আপনি সঙ্গে জিরো-আরম্ভের কথা বিবেচনা করতে পারেন numpy.zerosপরিবর্তে ব্যবহার numpy.emptyএখানে নোট দেখুন ।


1

আমি মনে করি আপনি তালিকা সহ বেশিরভাগ কাজ পরিচালনা করতে চান তবে ফলাফলটি ম্যাট্রিক্স হিসাবে ব্যবহার করুন। হতে পারে এটি একটি উপায়;

ur_list = []
for col in columns:
    ur_list.append(list(col))

mat = np.matrix(ur_list)

1

আমি মনে করি আপনি খালি নাম্বার অ্যারে তৈরি করতে পারেন:

>>> import numpy as np
>>> empty_array= np.zeros(0)
>>> empty_array
array([], dtype=float64)
>>> empty_array.shape
(0,)

আপনি যখন লুপটিতে নিম্পি অ্যারে সংযুক্ত করতে চান তখন এই ফর্ম্যাটটি কার্যকর।


0

একটি খালি NumPy অ্যারে এর আকৃতি নির্ধারণ না করে তৈরি করার জন্য উপায় আছে:

1।

arr = np.array([]) 

পছন্দ করল। কারণ আপনি জানেন যে আপনি এটিকে ন্যালি হিসাবে ব্যবহার করবেন।

2।

arr = []
# and use it as numpy. append to it or etc..

NumPy অতিরিক্ত ছাড়াই পরে np.ndarray টাইপ এ রূপান্তর করে [] dimionsion

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