【问题标题】:Why can the datatype of an array not be changed inside a loop?为什么不能在循环内更改数组的数据类型?
【发布时间】:2021-07-11 12:51:28
【问题描述】:

我有一个包含复杂条目的数组列表结构,我想将它们转换为浮点数。虚部可以去掉,没关系。

import numpy as np

a=np.array([2+3j,3+4j])
b=np.array([1+2j,4+3j])
arrays=[a,b]

for i,y in enumerate(arrays):
    y=y.astype('float64')

print(arrays)

我想知道,为什么这不起作用,而另一方面,在创建列表“数组”之前将类型更改为 float 确实有效。

import numpy as np

a=np.array([2+3j,3+4j])
b=np.array([1+2j,4+3j])
a=a.astype('float64')
b=b.astype('float64')
arrays=[a,b]
print(arrays)

这是一个非常基本的问题,但如果有人能分享他或她对此的想法,我会非常高兴。

提前致谢:)

【问题讨论】:

  • y=y.astype('float64') 这里y 是数组元素的副本。 arrays[i] = y.astype('float64') 可能有用。
  • astype 不是就地操作。因此,即使您设法将元素的 dtype 更改为 arrays,您也不会更改 a 引用的对象的 dtype。

标签: python arrays numpy


【解决方案1】:

我想知道,为什么这不起作用...

y.astype('float64') 创建一个新对象。 in 循环中的赋值将该新对象分配给名称y。因为赋值y不再指向数组项所以数组项没有改变。

如果您在修改项目的循环中执行操作就地,它会像您预期的那样工作。 ...

for i,y in enumerate(arrays):
    np.add(y,4,out=y)

for i,y in enumerate(arrays): y = y + 4 的行为类似于您问题中的示例。

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多