相关疑难解决方法(0)

_csv.Error:字段大于字段限制(131072)

我有一个脚本读取csv文件中有非常大的字段:

# example from http://docs.python.org/3.3/library/csv.html?highlight=csv%20dictreader#examples
import csv
with open('some.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
Run Code Online (Sandbox Code Playgroud)

但是,这会在某些csv文件上引发以下错误:

_csv.Error: field larger than field limit (131072)
Run Code Online (Sandbox Code Playgroud)

python csv

196
推荐指数
5
解决办法
9万
查看次数

什么决定了numpy中int的大小?

它似乎不是处理器的"位数"(32对64),特别是对这篇文章的评论:

好答案.正如我在上面的评论中提到的,我能够在使用64位ARM处理器的Raspberry Pi 3上复制@ suzep136的问题.知道为什么在64位架构上会出现溢出问题吗?我唯一能想到的是lapack/blas是为32位内核编译的; 我想我通过apt-get安装了numpy. - nrlakin

它也不是C中int的大小,例如在我的机器上:

>>> import numpy, ctypes
>>> 
>>> ctypes.sizeof(ctypes.c_int)
4
>>> numpy.array([1]).dtype
dtype('int64')
Run Code Online (Sandbox Code Playgroud)

那么,它取决于什么?

编辑:还有另一位候选人,谢谢你们:

LAPACK在所有架构上使用32位整数 - ev-br

编辑:部分答案在这里.谢谢Goyo.我已经复制了它并使其成为CW,因此您可以添加更精细的点,例如PyPy或Jython中发生的事情.我也对这个选择是否有更深层次的原因感兴趣.

python numpy

10
推荐指数
1
解决办法
1374
查看次数

pandas/numpy int64(python 3.6)中出现意外的32位整数溢出

让我从示例代码开始:

import numpy
from pandas import DataFrame

a = DataFrame({"nums": [2233, -23160, -43608]})

a.nums = numpy.int64(a.nums)

print(a.nums ** 2)
print((a.nums ** 2).sum())
Run Code Online (Sandbox Code Playgroud)

在我的本地计算机和其他开发人员的计算机上,这可以按预期工作并打印出来:

0       4986289
1     536385600
2    1901657664
Name: nums, dtype: int64
2443029553
Run Code Online (Sandbox Code Playgroud)

但是,在我们的生产服务器上,我们得到:

0       4986289
1     536385600
2    1901657664
Name: nums, dtype: int64
-1851937743
Run Code Online (Sandbox Code Playgroud)

这是32位整数溢出,尽管它是一个int64.

生产服务器使用python,numpy的,熊猫等相同版本这是一个64-bit Windows Server 2012OS,一切报道64位(例如python --version,sys.maxsize,plastform.architecture).

什么可能导致这个?

python numpy integer-overflow python-3.x pandas

9
推荐指数
1
解决办法
698
查看次数

Python & Pandas - pd.Series difference between int32 and int64

I'm starting to learn python, numpy and panda's and I have a really basic question, about sizes.

Please see the next code blocks:

1. Length: 6, dtype: int64

# create a Series from a dict
pd.Series({key: value for key, value in zip('abcdef', range(6))})
Run Code Online (Sandbox Code Playgroud)

vs.

2. Length: 6, dtype: int32

# but why does this generate a smaller integer size???
pd.Series(range(6), index=list('abcdef'))
Run Code Online (Sandbox Code Playgroud)

Question So I think when you put a list, numpy array, dictionary etc. in the pd.Series you will get …

python numpy data-analysis pandas

6
推荐指数
1
解决办法
1766
查看次数

使用numpy到平方值给出负数

我正在尝试使用numpy元素方形数组.我注意到有些值显示为负数.平方值不接近max int limit.有谁知道为什么会发生这种情况以及如何解决这个问题?我宁愿避免使用for循环来对数组元素进行平方,因为我的数据集非常大.

这是一个正在发生的事情的例子:

import numpy as np

test = [1, 2, 47852]
sq = np.array(test)**2
print(sq)
print(47852*47852)
Run Code Online (Sandbox Code Playgroud)

输出:

[1,4, -2005153392]
2289813904
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
2260
查看次数

numpy.dot 对于大整数给出错误的答案

我正在研究一些线性代数的东西,并且根本不明白为什么numpy给出以下内容:

在此输入图像描述

我从mathematica得到的结果是

在此输入图像描述

编辑:如果您需要矩阵:

test = [[19722145, -21016468, 51417377],
        [-185674670, 298847128, -428429486],
        [289326728, -516012704, 691212936]]

A = [[9, 4, 1], [2, 0, 8], [-8, 8, -8]]
Run Code Online (Sandbox Code Playgroud)

python arrays numpy dot-product

5
推荐指数
1
解决办法
2493
查看次数

numpy.sum()在大型数组上给出奇怪的结果

我似乎找到了一个陷阱,使用.sum()numpy数组,但我无法找到一个解释.从本质上讲,如果我尝试总结大阵,然后我开始变得无厘头的答案,但这种情况发生默默,我不能使输出足够好,谷歌的事业感.

例如,这与预期完全一样:

a = sum(xrange(2000)) 
print('a is {}'.format(a))

b = np.arange(2000).sum()
print('b is {}'.format(b))
Run Code Online (Sandbox Code Playgroud)

为两者提供相同的输出:

a is 1999000
b is 1999000
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用:

c = sum(xrange(200000)) 
print('c is {}'.format(c))

d = np.arange(200000).sum()
print('d is {}'.format(d))
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

c is 19999900000
d is -1474936480
Run Code Online (Sandbox Code Playgroud)

在更大的阵列上,可以获得积极的结果.这更加阴险,因为我可能不会发现一些不寻常的事情正在发生.例如:

e = sum(xrange(100000000))
print('e is {}'.format(e))

f = np.arange(100000000).sum()
print('f is {}'.format(f))
Run Code Online (Sandbox Code Playgroud)

给出这个:

e is 4999999950000000
f is 887459712
Run Code Online (Sandbox Code Playgroud)

这是与数据类型有关,甚至使用python float似乎解决了这个问题:

e = sum(xrange(100000000))
print('e is {}'.format(e))

f = …
Run Code Online (Sandbox Code Playgroud)

python numpy python-2.7

4
推荐指数
2
解决办法
2621
查看次数

Numpy 在 windows 和 unix 上返回不同的结果

给出以下代码:

import numpy as np
c = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

c = np.array(c)
print((c * c.transpose()).prod())
Run Code Online (Sandbox Code Playgroud)

在我的 Windows 机器上,它返回“-1462091776”(不知道它是如何从所有这些正数中得到负数的)。在 ubuntu 上它返回“131681894400”

有人知道这是怎么回事吗?

编辑:显然这是一个溢出问题。(感谢@rafaelc!)但它是可重现的(也感谢@richardec 进行测试)

所以现在的问题是..这是我应该报告的错误吗?我该向谁报告?

numpy

4
推荐指数
1
解决办法
710
查看次数

Python的电源运算符**的错误?

从以下代码:

import numpy as np

print 2**np.array([32, 33])
Run Code Online (Sandbox Code Playgroud)

我得到负数[-2147483648 -2147483648].我正在使用python 2.6.这是某种bug吗?相反,print 2**32给出了正确的答案4294967296.

python numpy

2
推荐指数
1
解决办法
263
查看次数