Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组转换为python标量_Python - Fatal编程技术网

将数组转换为python标量

将数组转换为python标量,python,Python,我需要很大的帮助,请查看以下代码: import.math dose =20.0 a = [[[2,3,4],[5,8,9],[12,56,32]] [[25,36,45][21,65,987][21,58,89]] [[78,21,98],[54,36,78],[23,12,36]]] PAC = math.exp(-dose*a) 这就是我想做的。然而,我得到的错误是 TypeError: only length-1 arrays can be converted t

我需要很大的帮助,请查看以下代码:

import.math

dose =20.0
a = [[[2,3,4],[5,8,9],[12,56,32]]
     [[25,36,45][21,65,987][21,58,89]]
     [[78,21,98],[54,36,78],[23,12,36]]]
PAC = math.exp(-dose*a)
这就是我想做的。然而,我得到的错误是

TypeError: only length-1 arrays can be converted to Python scalars

如果你想对数组执行数学运算(无论它们的维数……),你都应该考虑使用它。在您的情况下,相应的NumPy命令是:

PAC = numpy.exp(-dose*np.array(a))
如果NumPy不是一个选项,您必须循环
a
的每个元素,计算
math.exp
,将结果存储在列表中。。。真的很麻烦,效率也很低。这是因为当你传递一个列表时,
math
函数需要一个标量作为输入(正如异常告诉你的那样)。您可以将所有循环合并到一个列表中,不过:

PAC = [[[math.exp(-dose*j) for j in elem] for elem in row] for row in a]

但是,我再次强烈建议使用NumPy。

如果需要,数组的每个元素都要乘以-dose,然后对结果应用math.exp,您需要一个循环:

new_a = []
for subarray in a:
    new_sub_array = []
    for element in sub_array:
        new_element = math.exp(-dose*element)
        new_sub_array.append(new_element)
    new_a.append(new_sub_array)

或者,如果您有mathlab背景,您可以查询,以启用数组上的转换。

您应该真正使用NumPy来实现这一点。 下面是使用嵌套循环的方法:

>>> for item in a:
...     for sub in item:
...         for idx, number in enumerate(sub): 
...             print number, math.exp(-dose*number)
...             sub[idx] = math.exp(-dose*number)
使用
append
很慢,因为每次复制上一个数组并将新项堆叠到其中时。 使用enumerate,将数字更改到位。如果您想保留一份副本,请执行以下操作:

 acopy = a[:]

如果你没有太多的数字,而NumPy是一种过度杀戮,那么使用列表理解可以更快地完成上面的工作

我的预期输出与aI的形状相同,我这样做主要是为了可读性。OP似乎是一个(python)初学者。此外,虽然就地更改很容易,但会丢失原始数组,这在处理编码时通常是不可取的。我还发布了如何保留列表的副本。在迭代列表时使用append是一种糟糕的风格。另外,它遍布整个网络,在一次编程之后,你会问自己:等等,我如何迭代和更改值。这就是我们的枚举率。这就是OP所问的,如何改变价值观。那么让我们同意不同意吧。我的目标是可读性第一,保留原始列表第二。使用枚举不适合这种情况。OP显然是初学者,当你理解语言时,风格很重要。