python numpy shape_Python Numpy.ndarray.shape限制

我想用Python在Numpy中创建一个矩阵,代码如下:

import numpy

result=numpy.zeros((20,20,20,30,30,30))

numpy.save('result',result)

我收到以下错误:

Traceback (most recent call last):

File "numpy_memoryerror.py",

line 5, in

result=numpy.zeros((20,20,20,30,30,30))

MemoryError

如果我使用这样的较小尺寸:

result=numpy.ones((10,10,10,20,20,20))

然后代码工作.

有人能告诉我形状元组的限制吗?

解决方法:

它不是形状元组的基本限制,它是你的系统上没有足够的内存(RAM),因此是MemoryError.

20 * 20 * 20 * 30 * 30 * 30再次是2.16亿64位(8字节)浮点数或略高于1.6 GB的RAM.那么在此时运行脚本时你有1.6 GB的RAM吗? (不要忘记python,操作系统,其他正在运行的程序等使用的所有RAM).如果您使用的是linux / unix,则可以通过在命令提示符下键入free -m来查看可用内存量.在Windows中,您可以通过转到任务管理器查看可用内存.此外,一些操作系统限制单个进程(如python)可以分配的内存量;例如,32位窗口每个进程仅提供2 GB的地址空间.

将其与20 * 20 * 20 * 10 * 10 * 10进行比较,仅为~0.06 GB(或仅减少27倍的内存).

如果你不需要8字节浮点数,你可以这样做

numpy.zeros(20,20,20,30,30,30, dtype='float32')

这将通过使用单精度(32位)浮点数减半您的内存占用.默认情况下,numpy使用dtype =’float64′.

粗略地说,32位浮点数具有8位精度,64位浮点数具有16位精度.意味着1 1e-8对于32位浮点数只显示1,而1 1e-16对于64位浮点数显示为1,但1 1e-15显示为1.000000000000001与64位浮点数,但不是32位浮点数.

标签:python,numpy

ndarrayPython中的一种多维数组,可以用来存储和操作大量的数值数据。它具有许多有用的属性和方法,可以让用户更容易地处理数据。`numpy.ndarray` 是 NumPy 库中的一个类,用于表示 N 维数组(即多维数组)。它是 NumPy 的核心数据结构之一,提供了许多高效的操作,例如数组索引、切片、算术运算、数学函数等等。 在使用 `numpy.ndarray` 时,通常需要先导入 NumPy 库,然后通过 `numpy.array()` 函数将 Python 列表或元组转换成 N 维数组,例如: ```python import numpy as np # 从列表创建一个一维数组 a = np.array([1, 2, 3]) print(a) # 输出:[1 2 3] # 从元组创建一个二维数组 b = np.array([(1, 2, 3), (4, 5, 6)]) print(b) # 输出: # [[1 2 3] # [4 5 6]] ``` 可以通过 `ndarray.shape` 属性获取数组的维度信息,通过 `ndarray.dtype` 属性获取数组元素的数据类型,例如: ```python # 获取数组的形状 print(a.shape) # 输出:(3,) print(b.shape) # 输出:(2, 3) # 获取数组元素的数据类型 print(a.dtype) # 输出:int64 print(b.dtype) # 输出:int64 ``` 还可以使用各种方法对数组进行操作,例如: ```python # 数组加法 c = a + b print(c) # 输出: # [[2 4 6] # [5 7 9]] # 数组乘法 d = a * b print(d) # 输出: # [[ 1 4 9] # [ 4 10 18]] # 数组转置 e = b.T print(e) # 输出: # [[1 4] # [2 5] # [3 6]] ``` 这些只是 `numpy.ndarray` 类提供的一些基本功能,NumPy 库还有更多高级的特性和函数可以探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值