GVKun编程网logo

numpy数组中的整数溢出(numpy 整数数组)

19

在本文中,我们将带你了解numpy数组中的整数溢出在这篇文章中,我们将为您详细介绍numpy数组中的整数溢出的方方面面,并解答numpy整数数组常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效

在本文中,我们将带你了解numpy数组中的整数溢出在这篇文章中,我们将为您详细介绍numpy数组中的整数溢出的方方面面,并解答numpy 整数数组常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的c语言中的整数溢出问题、Java中的整数溢出、numpy数组中的多个累积和、numpy数组中的自定义数据类型

本文目录一览:

numpy数组中的整数溢出(numpy 整数数组)

numpy数组中的整数溢出(numpy 整数数组)

import numpy as npa = np.arange(1000000).reshape(1000,1000)print(a**2)

有了这段代码,我得到了这个答案。为什么我得到负值?

[[         0          1          4 ...,     994009     996004     998001] [   1000000    1002001    1004004 ...,    3988009    3992004    3996001] [   4000000    4004001    4008004 ...,    8982009    8988004    8994001] ...,  [1871554624 1873548625 1875542628 ..., -434400663 -432404668 -430408671] [-428412672 -426416671 -424420668 ..., 1562593337 1564591332 1566589329] [1568587328 1570585329 1572583332 ..., -733379959 -731379964 -729379967]]

答案1

小编典典

在您的平台上,np.arange返回dtype’int32’的数组:

In [1]: np.arange(1000000).dtypeOut[1]: dtype(''int32'')

数组的每个元素都是32位整数。平方导致结果不适合32位。结果被裁剪为32位,并且仍然解释为32位整数,这就是为什么看到负数的原因。

编辑: 在这种情况下,可以通过在平方之前构造dtype’int64’数组来避免整数溢出:

a=np.arange(1000000,dtype=''int64'').reshape(1000,1000)

请注意,使用numpy时,发现的问题是固有的危险。您必须谨慎选择dtype,并事先知道您的代码不会导致算术溢出。为了速度起见,numpy不能也不会在出现这种情况时警告您。

有关numpy邮件列表上对此的讨论,请参见http://mail.scipy.org/pipermail/numpy-
discussion/2009-April/041691.html。

c语言中的整数溢出问题

c语言中的整数溢出问题

1、以以下程序为例:

#include <stdio.h>

int main(void)
{
    int i = 2147483647;    //int类型可以表示的数值范围为 -2147483648 ~ 2147483647
    unsigned int j = 4294967295;  //unsigned int的取值范围为0 ~ 4294967295
    
    printf("%d  %d  %d\n", i, i + 1, i + 2);
    printf("%u  %u  %u\n", j, j + 1, j + 2);
    
    return 0;
}
//运行结果显示,当数值超过数据类型可以表示的最大范围时,数值会从头开始,比如i为
2147483648将从头显示-2147483648,
//j超过其最大可以表示的范围4294967295时,将从0开始表示超出的数值。

 

 

 

 

Java中的整数溢出

Java中的整数溢出

我在接受采访时被问到这个问题.
我被要求计算数字x1,x2,x3,… xn的平均值

class Iterator {
    bool hasNext;
    int getNext();
}

//所以它归结为这样的事情:

double average (Iterator & it) {

double average = 0;
double sum = 0;
int len = 0;

while (it.hasNext == true) {

    sum += it.getNext();
}

if (len > 0)
    average = sum / len;
}

采访者说清单大小不明,而且可能非常大,所以总和可能会溢出.他问我如何解决溢出问题,我通过跟踪我们如何超过最大数量等来回答,他说了一些关于推入堆栈的事情,平均值和长度,我从来没有真正理解他的解决方案通过推动这些2变量成某种列表?有人有线索吗?

解决方法

我不知道使用堆栈,但在代数的帮助下,我们可以使用旧的平均值推导出新平均值的公式.

假设您已经平均了n – 1个项目,并且您在oldAvg中有平均值.

oldAvg =(x1 x2 .. xn – 1)/(n – 1)

新的平均值将由newAvg表示:

newAvg =(x1 x2 .. xn – 1 xn)/ n

通过一些代数操作,我们可以使用旧平均值表示平均值的新平均值,以及下一个项目.

newAvg =(x1 x2 .. xn – 1)/ n xn / n

=((n – 1)/(n – 1))*(x1 x2 .. xn – 1)/ n xn / n

= oldAvg / n *(n – 1)xn / n

这可以通过在乘以n-1之前除以n来避免溢出.然后,您只需要添加下一个项xn,除以n.

第一个循环将平均值设置为等于第一个元素,但每个后续循环将使用上面的公式来推导新的平均值.

n++;
newAvg = oldAvg / n * (n - 1) + it.next() / n;

numpy数组中的多个累积和

numpy数组中的多个累积和

我是numpy的新手,如果对此问题已经提出,我感到抱歉。我正在寻找一种矢量化解决方案,该解决方案可以在一维numpy数组中运行多个不同大小的累加器。

my_vector=np.array([1,2,3,4,5])
size_of_groups=np.array([3,2])

我想要类似的东西

np.cumsum.group(my_vector,size_of_groups)
[1,6,9]

我不想使用循环的解决方案。numpy函数或numpy操作。

numpy数组中的自定义数据类型

numpy数组中的自定义数据类型

我正在创建一个numpy数组,该数组将填充我制作的特定类的对象。我想初始化数组,使其仅包含该类的对象。例如,这是我想做的事,如果我做这件事会发生什么。

class Kernel:    pass>>> L = np.empty(4,dtype=Kernel)TypeError: data type not understood

我可以做这个:

>>> L = np.empty(4,dtype=object)

然后将的每个元素分配L为一个Kernel对象(或任何其他类型的对象)。Kernel从编程的角度(类型检查)和数学的角度(对函数集进行操作)的角度来看,如果我能够拥有一个s数组,那将是如此的巧妙。

我可以使用任意类指定numpy数组的数据类型吗?

答案1

小编典典

如果您的内核类具有可预测的成员数据量,则可以为其定义dtype而不是类。例如,如果它由9个浮点数和一个int参数化,则可以

kerneldt = np.dtype([(''myintname'', np.int32), (''myfloats'', np.float64, 9)])arr = np.empty(dims, dtype=kerneldt)

每当您要操作单个内核的方法时,都必须进行强制转换才能将它们转换为Kernel类的对象,但这是将实际数据存储在NumPy数组中的一种方法。如果只想存储一个引用,则对象dtype是最好的,而无需将ndarray子类化。

今天关于numpy数组中的整数溢出numpy 整数数组的讲解已经结束,谢谢您的阅读,如果想了解更多关于c语言中的整数溢出问题、Java中的整数溢出、numpy数组中的多个累积和、numpy数组中的自定义数据类型的相关知识,请在本站搜索。

本文标签: