如何使用numpy在python中通过2D数组中的索引对数组进行切片

iezvtpos  于 2023-03-23  发布在  Python
关注(0)|答案(2)|浏览(157)

我写了下面的代码:

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

如果我输入以下值,将给予以下输出:

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

但我希望矩阵的第一行作为字符串值输入,如:

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

和矩阵的第2行作为整数值,如:

[50,60,70]

然后我想得到以下输出:

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

xv8emn3q1#

Numpy要求矩阵中的所有值都是相同的类型。这是由于它如何在数组中搜索项(有关更多信息,请查看strides)。
因此,如果希望数组中包含文本数据,则必须将整个数组的类型更改为支持字符串的类型。
另一种方法是用一个数组来存储名字,用一个单独的数组来存储值。另外,你可以使用pandas.DataFrame,因为它是你问题的直接解决方案。

lc8prwob

lc8prwob2#

列表列表:

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)]

它可以用来制造一个structured array,它的复合dtype是:

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

相关问题