- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上下文:我想使用 numpy ndarrays
与 float32
而不是 float64
.
编辑:附加上下文 - 我担心如何 numpy
正在执行这些调用,因为它们将作为神经网络中反向传播程序的一部分重复发生。我希望网络在 float32
中执行所有加法/减法/乘法/除法出于验证目的,因为我想将结果与另一组的工作进行比较。看起来像 randn
之类的方法的初始化将永远来自 float64
-> float32
与 .astype()
铸件。曾经我的 ndarray
类型为 float32
如果我使用 np.dot
例如,这些乘法会发生在 float32
中吗? ?如何验证?
我不清楚文档 - http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html
我想我可以添加 .astype('float32')
到 numpy 调用的末尾,例如,np.random.randn(y, 1).astype('float32')
.
我也看到 dtype=np.float32
是一个选项,例如,np.zeros(5, dtype=np.float32)
.但是,尝试 np.random.randn((y, 1), dtype=np.float32)
返回以下错误:
b = np.random.randn((3,1), dtype=np.float32)
TypeError: randn() got an unexpected keyword argument 'dtype'
float32
有什么区别?使用
dtype
并使用
.astype()
?
b = np.zeros(5, dtype=np.float32)
和
b = np.zeros(5).astype('float32')
评估时:
print(type(b))
print(b[0])
print(type(b[0]))
[ 0. 0. 0. 0. 0.]
<class 'numpy.ndarray'>
0.0
<class 'numpy.float32'>
最佳答案
让我们看看我是否可以解决我在评论中看到的一些困惑。
制作一个数组:
In [609]: x=np.arange(5)
In [610]: x
Out[610]: array([0, 1, 2, 3, 4])
In [611]: x.dtype
Out[611]: dtype('int32')
arange
的默认值是制作一个int32。
astype
是一个数组方法;它可以用于任何数组:
In [612]: x.astype(np.float32)
Out[612]: array([ 0., 1., 2., 3., 4.], dtype=float32)
arange
还需要一个
dtype
范围
In [614]: np.arange(5, dtype=np.float32)
Out[614]: array([ 0., 1., 2., 3., 4.], dtype=float32)
是先创建 int 数组并对其进行转换,还是直接创建 float32 对我来说无关紧要。这是一个基本操作,在编译后的代码中完成。
stop
值,在这种情况下,它会给我一个浮点数组——默认的浮点类型。
In [615]: np.arange(5.0)
Out[615]: array([ 0., 1., 2., 3., 4.])
In [616]: _.dtype
Out[616]: dtype('float64')
zeros
类似;默认的 dtype 是 float64,但是我可以通过一个参数来改变它。由于它的主要任务是分配内存,并且不必进行任何计算,因此我确信它会立即创建所需的 dtype,无需进一步转换。但同样,这是编译后的代码,我不必担心它在幕后做了什么。
In [618]: np.zeros(5)
Out[618]: array([ 0., 0., 0., 0., 0.])
In [619]: _.dtype
Out[619]: dtype('float64')
In [620]: np.zeros(5,dtype=np.float32)
Out[620]: array([ 0., 0., 0., 0., 0.], dtype=float32)
randn
涉及大量计算,显然它被编译为使用默认浮点类型。它不需要 dtype。但由于结果是一个数组,所以可以用
astype
进行转换.
In [623]: np.random.randn(3)
Out[623]: array([-0.64520949, 0.21554705, 2.16722514])
In [624]: _.dtype
Out[624]: dtype('float64')
In [625]: __.astype(np.float32)
Out[625]: array([-0.64520949, 0.21554704, 2.16722512], dtype=float32)
让我强调一下
astype
是一个数组的方法。它获取数组的值并生成一个具有所需 dtype 的新数组。它不会对数组本身或创建该数组的函数进行追溯(或就地)操作。
astype
的效果通常(总是?)与
dtype
相同参数,但 Action 顺序不同。
dtype
的稀疏矩阵创建器参数,并用
astype
实现它最后调用方法。
dot
之类的计算时或
*
,它尝试将输出 dtype 与输入匹配。在混合类型的情况下,它采用更高精度的替代方案。
In [642]: np.arange(5,dtype=np.float32)*np.arange(5,dtype=np.float64)
Out[642]: array([ 0., 1., 4., 9., 16.])
In [643]: _.dtype
Out[643]: dtype('float64')
In [644]: np.arange(5,dtype=np.float32)*np.arange(5,dtype=np.float32)
Out[644]: array([ 0., 1., 4., 9., 16.], dtype=float32)
有类型转换规则。查找这些的一种方法是使用
can_cast
功能:
In [649]: np.can_cast(np.float64,np.float32)
Out[649]: False
In [650]: np.can_cast(np.float32,np.float64)
Out[650]: True
在某些计算中,它可能会将 32 转换为 64,进行计算,然后转换回 32。目的是避免舍入错误。但我不知道你是如何从文档或测试中发现的。
关于python-3.x - numpy 中的 dtype= 和 .astype() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623429/
作为脚本的输出,我有 numpy masked array和标准numpy array .如何在运行脚本时轻松检查数组是否为掩码(具有 data 、 mask 属性)? 最佳答案 您可以通过 isin
我的问题 假设我有 a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.arra
numpy 是否有用于矩阵模幂运算的内置实现? (正如 user2357112 所指出的,我实际上是在寻找元素明智的模块化减少) 对常规数字进行模幂运算的一种方法是使用平方求幂 (https://en
我已经在 Numpy 中实现了这个梯度下降: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
我有一个使用 Numpy 在 CentOS7 上运行的项目。 问题是安装此依赖项需要花费大量时间。 因此,我尝试 yum install pip install 之前的 numpy 库它。 所以我跑:
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) 在不同的机器学习和数据分析教程中,我看到这个种子集有不同的数字。选择特定的种子编号真的有区别吗?或者任何数字都可以吗?选择种子数的目标是相同实验的可重复性。
我需要读取存储在内存映射文件中的巨大 numpy 数组的部分内容,处理数据并对数组的另一部分重复。整个 numpy 数组占用大约 50 GB,我的机器有 8 GB RAM。 我最初使用 numpy.m
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
似乎 numpy.empty() 可以做的任何事情都可以使用 numpy.ndarray() 轻松完成,例如: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
我在大型 numpy 数组中有许多不同的形式,我想使用 numpy 和 scipy 计算它们之间的边到边欧氏距离。 注意:我进行了搜索,这与堆栈中之前的其他问题不同,因为我想获得数组中标记 block
我有一个大小为 (2x3) 的 numpy 对象数组。我们称之为M1。在M1中有6个numpy数组。M1 给定行中的数组形状相同,但与 M1 任何其他行中的数组形状不同。 也就是说, M1 = [ [
如何使用爱因斯坦表示法编写以下点积? import numpy as np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
假设我有 np.array of a = [0, 1, 1, 0, 0, 1] 和 b = [1, 1, 0, 0, 0, 1] 我想要一个新矩阵 c 使得如果 a[i] = 0 和 b[i] = 0
我有一个形状为 (32,5) 的 numpy 数组 batch。批处理的每个元素都包含一个 numpy 数组 batch_elem = [s,_,_,_,_] 其中 s = [img,val1,val
尝试为基于文本的多标签分类问题训练单层神经网络。 model= Sequential() model.add(Dense(20, input_dim=400, kernel_initializer='
首先是一个简单的例子 import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
我正在尝试平均二维 numpy 数组。所以,我使用了 numpy.mean 但结果是空数组。 import numpy as np ws1 = np.array(ws1) ws1_I8 = np.ar
import numpy as np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2]]) x[y] 预期输出: ar
我有两个数组 A (4000,4000),其中只有对角线填充了数据,而 B (4000,5) 填充了数据。有没有比 numpy.dot(a,b) 函数更快的方法来乘(点)这些数组? 到目前为止,我发现
我是一名优秀的程序员,十分优秀!