【问题标题】:Problem in numpy operation for a 2*2 list2 * 2列表的numpy操作问题
【发布时间】:2020-03-06 09:24:31
【问题描述】:

enter image description here

我为 2D 列表编写了代码。

row_num = int(input())
col_ = int(input())
arr2=[]
for i in range(row_num):
    arr2.append([])
    a=input()
    a=a.split(" ")
    for j in range(col_):
        arr2[i].append(a[j])
for j in range(2):
  arr2[j][-2]=float(arr2[j][-2])-float(arr2[j][-1])
print(arr2)

首先我没有将列表转换为 np 数组,所以我的输出是

2
2
2 9
2 9
[[-7.0, '9'], [-7.0, '9']]

但是当我将列表转换为 np 数组并执行相同的操作时

row_num = int(input())
col_ = int(input())
arr2=[]
for i in range(row_num):
    arr2.append([])
    a=input()
    a=a.split(" ")
    for j in range(col_):
        arr2[i].append(a[j])
arr2=np.array(arr2)   #here I am converting list into np array
for j in range(2):
  arr2[j][-2]=float(arr2[j][-2])-float(arr2[j][-1])
print(arr2)

我得到了不同的输出

2
2
2 9
2 9
[['-' '9']
 ['-' '9']]

我不知道,为什么我得到不同的答案?

【问题讨论】:

    标签: python-3.x list numpy


    【解决方案1】:

    documentation for numpy.array() 表示,对于它的参数dtype

    数组所需的数据类型。如果没有给出,那么类型将被确定为在序列中保存对象所需的最小类型。 ...

    这正是这里发生的事情。您期望该数组能够同时保存 strfloat 值,就像普通的 Python 数组一样;为此,dtype 应该是 object。由于您没有指定类型,因此它选择了单个字符:

    >>> np.array(['2', '9'])
    array(['2', '9'], 
          dtype='<U1')
    

    然后,当您尝试将 -7.0 放入单个字符数组的一个槽中时,它一定已将其转换为字符串 '-7.0' 并且只使用了其中的第一个字符。

    因此,请在创建数组时为您的数组指定 dtype。如果您希望获得 Numpy 的一些性能优势,您可能希望使用浮点 dtype 并将字符串转换为浮点数将它们放入 Numpy 数组中。或者您可以使用astype() 进行转换:

    >>> np.array(['2', '9']).astype(float)
    array([ 1.,  2.])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2022-10-04
      相关资源
      最近更新 更多