【问题标题】:How to assign column values in large numpy array?如何在大型 numpy 数组中分配列值?
【发布时间】:2018-10-04 06:07:41
【问题描述】:

我是 Python 编程新手,在为非常大的 numpy.array 的第一列分配特定值时遇到问题。

这是我使用的代码:

import numpy as np

a = np.zeros ((365343020, 9), dtype = np.float32)

for n in range (0, 36534302):
    a[n*10:(n+1)*10,0] = n

第二行是我创建一个数组的地方,它有 365343020 行和 9 列,用零填充;而连续的“for”意味着用一个向量替换数组的第一列,该向量的元素是 36534302 个连续整数,每个整数重复 10 次(例如 [0,0,…,0,1,1,…,1,2, 2,…, 36534301, 36534301,…, 36534301])。

代码似乎会根据需要响应直到第 168000000 行或数组左右,然后它将 10 次重复的数字替换为最后一位奇数与之前的(偶数)数的第二次重复。

我一直在寻找有关视图和副本之间差异的解释。但是,即使尝试手动定义数组的特定单元格的内容(循环错误地定义了它),它也不会改变。

您能帮我解决这个问题吗? 谢谢

【问题讨论】:

  • 这是浮点精度。查看np.float32(168_000_001) 的输出。你可以改用float64
  • 谢谢保罗。您的建议解决了问题。

标签: python arrays numpy


【解决方案1】:

也许您的程序消耗了太多内存。这是您的代码的一些基本数学运算。

Date type: float32
Bits used: 32 bits
Size of array: 3288087180 (365343020*9)
Total memory consumed: 105218789760 bits(13.15234872 GB)

1.如果存储在数组中的值不大,请尝试使用float8位。
2.尝试减小数组大小。
3.1和2都

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2016-12-27
    • 2017-11-15
    • 2018-08-17
    • 2019-02-24
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多