簡體   English   中英

如何使用 numpy 在 python 的二維數組中按其索引對數組進行切片

[英]How to slice array by its index in 2D array in python using numpy

我寫了以下代碼:

import numpy as np
n_rows = int(input("Enter number of rows:"))
n_columns = int(input("Enter number of columns:"))
print("Enter 2D array values---")
matrix = []
for i in range(n_rows):
    a=[]
    for j in range(n_columns):
        a.append(int(input()))
    matrix.append(a)
arr=np.array(matrix)
arr

如果我輸入以下值,這將給出以下 output:

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

但我希望矩陣的第一行作為字符串值輸入,例如:

["John","Alex","Smith"]

和矩陣的第二行作為 integer 值,如:

[50,60,70]

然后我想得到以下output:

Name: John , Marks: 50
Name: Alex , Marks: 60
Name: Smith, Marks: 70

Numpy 要求矩陣中的所有值都屬於同一類型。 這是由於它如何搜索數組中的項目(有關更多信息,請查找strides

因此,如果您想要數組中的文本數據,您必須將整個數組的類型更改為支持字符串的類型。

另一種方法是為名稱設置一個數組,為值設置一個單獨的數組。 此外,您可以使用pandas.DataFrame直接解決您的問題

列表列表:

In [274]: alist = [["John","Alex","Smith"],[50,60,70]]
In [275]: alist
Out[275]: [['John', 'Alex', 'Smith'], [50, 60, 70]]

只需調用np.array創建一個包含字符串的數組,這是最小的常見 dtype:

In [276]: np.array(alist)
Out[276]: 
array([['John', 'Alex', 'Smith'],
       ['50', '60', '70']], dtype='<U21')

我們也可以指定object ,但這樣的數組實際上與原始列表相同:

In [277]: np.array(alist, dtype=object)
Out[277]: 
array([['John', 'Alex', 'Smith'],
       [50, 60, 70]], dtype=object)

該列表的“轉置”:

In [278]: altlist = list(zip(*alist))
In [279]: altlist
Out[279]: [('John', 50), ('Alex', 60), ('Smith', 70)]

可用於制作具有復合 dtype 的structured array

In [280]: np.array(altlist, dtype='U10,int')
Out[280]: 
array([('John', 50), ('Alex', 60), ('Smith', 70)],
      dtype=[('f0', '<U10'), ('f1', '<i8')])

或 dataframe:

In [281]: pd.DataFrame(altlist)
Out[281]: 
       0   1
0   John  50
1   Alex  60
2  Smith  70

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM