我有.npy格式的数据文件。但为简单起见,我们采取以下案例
data={}
data["a"]=[1.,2.,3.,4.,5.]
data["b"]=[10,20,30,40,50]
a=data["a"]
b=data["b"]
c1=a*b
c2=a/b
c3=np.sqrt(a/b)
这会产生以下错误
TypeError: can't multiply sequence by non-int of type 'list'
TypeError: unsupported operand type(s) for /: 'list' and 'list'
我们如何使用这些类型的数组进行上述操作? 谢谢
答案 0 :(得分:0)
这些输入a
和b
是列表,因此您无法执行这些操作。您需要通过调用np.array()
将其中一个输入转换为NumPy数组,然后执行这些操作,如下所示 -
In [21]: a
Out[21]: [1.0, 2.0, 3.0, 4.0, 5.0]
In [22]: b
Out[22]: [10, 20, 30, 40, 50]
In [23]: np.array(a)*b # Option 1
Out[23]: array([ 10., 40., 90., 160., 250.])
In [24]: a*np.array(b) # Option 2
Out[24]: array([ 10., 40., 90., 160., 250.])
In [25]: np.array(a)/b # Option 1
Out[25]: array([ 0.1, 0.1, 0.1, 0.1, 0.1])
In [26]: a/np.array(b) # Option 2
Out[26]: array([ 0.1, 0.1, 0.1, 0.1, 0.1])
In [27]: np.sqrt(np.array(a)/b) # Option 1
Out[27]: array([ 0.31622777, 0.31622777, 0.31622777, 0.31622777, 0.31622777])
In [28]: np.sqrt(a/np.array(b)) # Option 2
Out[28]: array([ 0.31622777, 0.31622777, 0.31622777, 0.31622777, 0.31622777])
如果需要将输出保存为列表,则需要将这样获得的NumPy数组转换回调用ndarray.tolist()
的列表,其中ndarray是NumPy数组输出。因此,对于乘法情况,你会有 -
In [29]: (np.array(a)*b).tolist()
Out[29]: [10.0, 40.0, 90.0, 160.0, 250.0]
答案 1 :(得分:0)
正如所说,b
和c1 = [x*y for x,y in zip(a,b)]
c2 = [x/y for x,y in zip(a,b)]
是列表。我认为您正在尝试对列表项执行操作,因此您必须遍历每个项目。你可以像这样做列表理解:
jenv add /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
oracle64-1.6.0.65 added
1.6.0.65 added
1.6 added
等
答案 2 :(得分:0)
在我的例子中使用lists-comprehencion:
data={}
data["a"]=[1.,2.,3.,4.,5.]
data["b"]=[10,20,30,40,50]
a=data["a"]
b=data["b"]
c1 = [(i*j) for i,j in zip(a,b)]
c2 = [(i/j) for i,j in zip(a,b)]
c3 = [np.sqrt(i/j]) for i,j in zip(a,b)]
输出:
#c1
[10.0, 40.0, 90.0, 160.0, 250.0]
#c2
[0.1, 0.1, 0.1, 0.1, 0.1]
#c3
[0.31622776601683794, 0.31622776601683794, 0.31622776601683794, 0.31622776601683794, 0.31622776601683794]