আপনি কীভাবে একটি বহুমাত্রিক অ্যারে থেকে কলামটি বের করবেন?


উত্তর:


227
>>> import numpy as np
>>> A = np.array([[1,2,3,4],[5,6,7,8]])

>>> A
array([[1, 2, 3, 4],
    [5, 6, 7, 8]])

>>> A[:,2] # returns the third columm
array([3, 7])

এছাড়াও দেখুন: মেমরি বরাদ্দ করতে "numpy.arange" এবং "পুনঃ আকার"

উদাহরণ: (ম্যাট্রিক্সের আকারের সাথে একটি অ্যারের বরাদ্দকরণ (3x4))

nrows = 3
ncols = 4
my_array = numpy.arange(nrows*ncols, dtype='double')
my_array = my_array.reshape(nrows, ncols)

8
আমাকে আবিষ্কার করতে 2 ঘন্টা সময় নিয়েছে [:, 2] অনুমান করুন এই বৈশিষ্ট্যটি কাটানোর বিষয়ে সরকারী সাহিত্যে নেই?
নিকেন

কমা মানে কি?
ফিল

3
@ ফিল [row, col]। কমা পৃথক।
AsheKetchum

11
এই উত্তরটিতে এতগুলি উপার্জন কীভাবে হতে পারে? ওপি কখনও বলেনি এটি একটি অদ্ভুত অ্যারে
জিরাকুই

3
২ টি কলাম নিষ্কাশনের জন্য: এ [:, [1,3]] উদাহরণস্বরূপ দ্বিতীয় এবং চতুর্থ কলামটি বের করুন
সাদালসুদ

176

এমন কি হতে পারে যে আপনি একটি নম্পপি অ্যারে ব্যবহার করছেন ? পাইথনের অ্যারে মডিউল রয়েছে তবে এটি বহুমাত্রিক অ্যারে সমর্থন করে না। সাধারণ পাইথন তালিকাগুলি একক মাত্রিকও।

তবে আপনার কাছে যদি এই জাতীয় একটি সাধারণ দ্বি-মাত্রিক তালিকা থাকে:

A = [[1,2,3,4],
     [5,6,7,8]]

তারপরে আপনি এই জাতীয় কলামটি বের করতে পারেন:

def column(matrix, i):
    return [row[i] for row in matrix]

দ্বিতীয় কলামটি বের করা হচ্ছে (সূচী 1):

>>> column(A, 1)
[2, 6]

বা বিকল্পভাবে, সহজভাবে:

>>> [row[1] for row in A]
[2, 6]

80

আপনার মত অ্যারে থাকলে

a = [[1, 2], [2, 3], [3, 4]]

তারপরে আপনি এর মতো প্রথম কলামটি বের করুন:

[row[0] for row in a]

সুতরাং ফলাফলটি এরকম দেখাচ্ছে:

[1, 2, 3]

38

এটা দেখ!

a = [[1, 2], [2, 3], [3, 4]]
a2 = zip(*a)
a2[0]

এটি উপরে যেমন একইভাবে হয় তবে জিপটি আরও কম কাজ করে তবে আর্গুমেন্ট হিসাবে একক অ্যারের প্রয়োজন হয়, * একটি বাক্য গঠন বহুমাত্রিক অ্যারেটিকে একক অ্যারে আর্গুমেন্টে আনপ্যাক করে


7
উপরে কি? মনে রাখবেন উত্তরগুলি সর্বদা একইভাবে সাজানো হয় না।
মুহাদ

2
এটি পরিষ্কার, তবে পারফরম্যান্স যদি উদ্বেগজনক হয় তবে এটি সবচেয়ে কার্যকরী হতে পারে না, কারণ এটি পুরো ম্যাট্রিক্সটি স্থানান্তর করে।
আইসআর্ডার

6
এফওয়াইআই, এটি অজগর 2 এ কাজ করে তবে অজগর 3 এ আপনি জেনারেটর অবজেক্ট পাবেন যা কোনটি সাবস্ক্রিপ্টযোগ্য নয়।
habষভ অগ্রহরি

@ Habষভআগ্রহরি যাইহোক পি 3 এ এই জিপটি করবেন?
CtrlAltF2

2
@ ওয়ার্ল্ডড্রাইভ এন্টারপ্রাইজস হ্যাঁ, আপনাকে জেনারেটরের বস্তুকে তালিকায় রূপান্তর করতে হবে এবং তারপরে সাবস্ক্রিপশন করতে হবে। উদাহরণ:a2 = zip(*a); a2 = list(a2); a2[0]
habষভ অগ্রহরি

14
def get_col(arr, col):
    return map(lambda x : x[col], arr)

a = [[1,2,3,4], [5,6,7,8], [9,10,11,12],[13,14,15,16]]

print get_col(a, 3)

পাইথনের মানচিত্রের ফাংশনটি আরও একটি উপায়।


11
>>> x = arange(20).reshape(4,5)
>>> x array([[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]])

আপনি যদি দ্বিতীয় কলামটি চান তবে আপনি ব্যবহার করতে পারেন

>>> x[:, 1]
array([ 1,  6, 11, 16])

1
এই নম্পটি ব্যবহার করছেন?
চিরকাল

1
arange()পাইপোন 3 এর জন্য আমি নপির বাইরে কোনও ডকুমেন্টেশন পাচ্ছি না। যে কেউ?
কেভিন ডব্লিউ ম্যাথিউজ


9

আইটেমজেটার অপারেটর যদি খুব সামান্য বৈচিত্র্যের জন্য তালিকা বোধগম্যতার চেয়ে মানচিত্র-হ্রাস শৈলীর অজগর পছন্দ করে তবে সেগুলিও সহায়তা করতে পারে!

# tested in 2.4
from operator import itemgetter
def column(matrix,i):
    f = itemgetter(i)
    return map(f,matrix)

M = [range(x,x+5) for x in range(10)]
assert column(M,1) == range(1,11)

1
বড় ডেটার জন্য itertools.imap ব্যবহার করুন
Paweł Polewicz

আমার ব্যবহারের ক্ষেত্রে তালিকার বোধগম্য পদ্ধতির চেয়ে আইটেমজিটার পদ্ধতির প্রায় 50x দ্রুত দৌড়েছিল। পাইথন ২.7.২, কয়েকটি কেস এবং কলাম সহ ম্যাট্রিক্সে ব্যবহারের ক্ষেত্রে প্রচুর পুনরাবৃত্তি হয়েছিল।
জয়েলপ্ট

7

আপনি এটি ব্যবহার করতে পারেন:

values = np.array([[1,2,3],[4,5,6]])
values[...,0] # first column
#[1,4]

দ্রষ্টব্য: এটি অন্তর্নির্মিত অ্যারেগুলির জন্য কাজ করছে না এবং প্রান্তিককরণ নয় (যেমন এনপি.আররে ([[1,2,3], [4,5,6,7]])))


6

আমি মনে করি আপনি নীচে অ্যারের মতো অ্যারে থেকে কলামটি বের করতে চান

import numpy as np
A = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

এখন আপনি যদি তৃতীয় কলামটি বিন্যাসে পেতে চান

D=array[[3],
[7],
[11]]

তারপরে আপনাকে প্রথমে অ্যারেটিকে একটি ম্যাট্রিক্স তৈরি করতে হবে

B=np.asmatrix(A)
C=B[:,2]
D=asarray(C)

এবং এখন আপনি অ্যালেক্সের মতো হিসাবগুলি করতে পারেন যেমন আপনি এক্সলে করেন।


1
যদিও এটি আমাকে অনেক সাহায্য করেছিল, আমি মনে করি উত্তরটি আরও কম হতে পারে: ১. এ = এনপি.আররে ([[[১,২,৩,৪]], [৫,6,7,৮]], [৯,১০, 11,12]]) 2. এ [:, 1] >> অ্যারে ([2, 6, 10])
ইউফোস

6

ধরা যাক আমাদের n X mম্যাট্রিক্স ( nসারি এবং mকলাম) আছে 5 টি সারি এবং 4 কলাম

matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]

পাইথনে কলামগুলি বের করতে, আমরা এই জাতীয় তালিকা বোঝার ব্যবহার করতে পারি

[ [row[i] for row in matrix] for in range(4) ]

আপনার ম্যাট্রিক্সের যতগুলি কলাম রয়েছে তার দ্বারা আপনি 4 প্রতিস্থাপন করতে পারেন। ফলাফল হলো

[ [1,5,9,13,17],[2,10,14,18],[3,7,11,15,19],[4,8,12,16,20] ]


এটি কি সম্পূর্ণ নতুন তালিকা তৈরি করে?
কেভিন ডব্লিউ ম্যাথিউজ

5
array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

col1 = [val[1] for val in array]
col2 = [val[2] for val in array]
col3 = [val[3] for val in array]
col4 = [val[4] for val in array]
print(col1)
print(col2)
print(col3)
print(col4)

Output:
[1, 5, 9, 13]
[2, 6, 10, 14]
[3, 7, 11, 15]
[4, 8, 12, 16]

4

ম্যাট্রিক্স ব্যবহারের আরও একটি উপায়

>>> from numpy import matrix
>>> a = [ [1,2,3],[4,5,6],[7,8,9] ]
>>> matrix(a).transpose()[1].getA()[0]
array([2, 5, 8])
>>> matrix(a).transpose()[0].getA()[0]
array([1, 4, 7])

3

পাইথনে যদি আপনার দ্বি-মাত্রিক অ্যারে থাকে (নোংরা নয়), আপনি এর মতো সমস্ত কলামগুলি বের করতে পারেন,

data = [
['a', 1, 2], 
['b', 3, 4], 
['c', 5, 6]
]

columns = list(zip(*data))

print("column[0] = {}".format(columns[0]))
print("column[1] = {}".format(columns[1]))
print("column[2] = {}".format(columns[2]))

এই কোডটি কার্যকর করলে ফল পাওয়া যাবে,

>>> print("column[0] = {}".format(columns[0]))
column[0] = ('a', 'b', 'c')

>>> print("column[1] = {}".format(columns[1]))
column[1] = (1, 3, 5)

>>> print("column[2] = {}".format(columns[2]))
column[2] = (2, 4, 6)

অবশ্যই, আপনি সূচী দ্বারা একটি একক কলাম বের করতে পারেন (উদাঃ columns[0])


2

zip(*iterable)নেস্টেড তালিকা স্থানান্তর করতে ব্যবহার করা সত্ত্বেও , নীস্টযুক্ত তালিকা দৈর্ঘ্যে পরিবর্তিত হয় তবে আপনি নীচেরগুলিও ব্যবহার করতে পারেন:

map(None, *[(1,2,3,), (4,5,), (6,)])

ফলাফল স্বরূপ:

[(1, 4, 6), (2, 5, None), (3, None, None)]

প্রথম কলামটি হ'ল:

map(None, *[(1,2,3,), (4,5,), (6,)])[0]
#>(1, 4, 6)

2

ভাল একটি 'বিট' দেরী ...

যদি পারফরম্যান্স সম্পর্কিত বিষয় এবং আপনার ডেটা আয়তক্ষেত্রাকার আকারযুক্ত হয় তবে আপনি এটি এক মাত্রায় সংরক্ষণ করতে পারেন এবং নিয়মিত টুকরো টুকরো করে কলামগুলি অ্যাক্সেস করতে পারেন ...

A = [[1,2,3,4],[5,6,7,8]]     #< assume this 4x2-matrix
B = reduce( operator.add, A ) #< get it one-dimensional

def column1d( matrix, dimX, colIdx ):
  return matrix[colIdx::dimX]

def row1d( matrix, dimX, rowIdx ):
  return matrix[rowIdx:rowIdx+dimX] 

>>> column1d( B, 4, 1 )
[2, 6]
>>> row1d( B, 4, 1 )
[2, 3, 4, 5]

ঝরঝরে জিনিস এটি সত্যিই দ্রুত। তবে নেতিবাচক সূচী এখানে কাজ করে না! সুতরাং আপনি সূচি -1 দ্বারা সর্বশেষ কলাম বা সারিটি অ্যাক্সেস করতে পারবেন না।

আপনার যদি নেতিবাচক সূচকের প্রয়োজন হয় তবে আপনি অ্যাক্সেসর-ফাংশনগুলি কিছুটা টিউন করতে পারেন, যেমন

def column1d( matrix, dimX, colIdx ):
  return matrix[colIdx % dimX::dimX]

def row1d( matrix, dimX, dimY, rowIdx ):
  rowIdx = (rowIdx % dimY) * dimX
  return matrix[rowIdx:rowIdx+dimX]

আমি এই পদ্ধতিটি যাচাই করেছি এবং কলাম পুনরুদ্ধারের ব্যয় লুপের জন্য নেস্টযুক্তের চেয়ে সস্তা। তবে, ম্যাট্রিক্স বড় হলে 2 ডি ম্যাট্রিক্সকে 1 ডি তে হ্রাস করা ব্যয়বহুল, 1000 * 1000 বলুন say
ঝংজুন 'মার্ক' জিন

2

আপনি যদি কেবলমাত্র একটি কলামের বেশি দখল করতে চান তবে কেবল স্লাইসটি ব্যবহার করুন:

 a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
    print(a[:, [1, 2]])
[[2 3]
[5 6]
[8 9]]

2

আমি পরবর্তী ইঙ্গিতটি পছন্দ করি: ম্যাট্রিক্সের নামকরণ matrix_aএবং ব্যবহার column_numberকরা উদাহরণস্বরূপ:

import numpy as np
matrix_a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
column_number=2

# you can get the row from transposed matrix - it will be a column:
col=matrix_a.transpose()[column_number]

1

কেবল ট্রান্সপোজ () ব্যবহার করুন, তারপরে আপনি সারি পাওয়ার সাথে সাথে কলম্বমগুলি সহজেই পেতে পারেন

matrix=np.array(originalMatrix).transpose()
print matrix[NumberOfColum]

0

একটি ম্যাট্রিক্স থেকে সমস্ত কলাম একটি নতুন তালিকায়:

N = len(matrix) 
column_list = [ [matrix[row][column] for row in range(N)] for column in range(N) ]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.