小编Miq*_*uel的帖子

两个正数的乘法在Python 3中给出了负输出

我有一个DataFrame df1:

df1.head() = 

             wght          num_links 
id_y  id_x                      
 3     133   0.000203          2      
       186   0.000203          2 
 5     6     0.000203          2      
       98    0.000203          2      
       184   0.000203          2
Run Code Online (Sandbox Code Playgroud)

我需要计算一个名为的变量thr,

thr = N*(N-1)*2,
Run Code Online (Sandbox Code Playgroud)

哪个N是行数df1.

问题是,当我计算时thr,Python会抛出一个负值(尽管所有输入都是正数):

ipdb> df1['wght'].count()*(df1['wght'].count()-1)*2
-712569744 
Run Code Online (Sandbox Code Playgroud)

可能的暗示

行数N是

ipdb> df1['wght'].count() 
137736 
Run Code Online (Sandbox Code Playgroud)

因此,

ipdb> 137736*137735*2
37942135920.
Run Code Online (Sandbox Code Playgroud)

考虑到可分配给a的最大值int322147483647,我怀疑NumPy会考虑type(thr) = <int32>,应该是什么时候<int64>.这有意义吗?

请注意,我没有编写生成的代码,df1因为

ipdb> df1['wght'].count() 
137736
Run Code Online (Sandbox Code Playgroud)

但是,如果需要重现错误,请告诉我.

提前致谢.

python numpy dataframe pandas

7
推荐指数
1
解决办法
1100
查看次数

重命名重复的索引值pandas DataFrame

我有一个包含一些重复索引值的DataFrame:

df1 =  pd.DataFrame( np.random.randn(6,6), columns = pd.date_range('1/1/2010', periods=6), index = {"A", "B", "C", "D", "E", "F"})
df1.rename(index = {"C": "A", "B": "E"}, inplace = 1)

ipdb> df1
      2010-01-01  2010-01-02  2010-01-03  2010-01-04  2010-01-05  2010-01-06
 A   -1.163883    0.593760    2.323342   -0.928527    0.058336   -0.209101
 A   -0.593566   -0.894161   -0.789849    1.452725    0.821477   -0.738937
 E   -0.670305   -1.788403    0.134790   -0.270894    0.672948    1.149089
 F    1.707686    0.323213    0.048503    1.168898    0.002662   -1.988825
 D    0.403028   -0.879873   -1.809991   -1.817214   -0.012758    0.283450
 E   -0.224405   -1.803301    0.582946    0.338941    0.798908    0.714560
Run Code Online (Sandbox Code Playgroud)

我想只更改重复值的名称,并获取如下所示的DataFrame:

ipdb> df1
     2010-01-01 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在 Numba @jitclass 中使用列表

我正在模拟一个非常蹩脚的游戏,它基本上会计算玩家在游戏过程中收集的硬币和敌人的数量。该代码包含两个 jitclass:一个playerjitclass 和一个gamejitclass。

对于这个player类,我们有一些属性和一些方法来描述玩家在游戏中的进展。

from numba import jitclass, int64, float64, deferred_type
from numba.typed import List
import random


specs_player = OrderedDict()
specs_player['level'] = int64
specs_player['coins'] = float64


@jitclass(specs_player)
class Player:

    def __init__(self):
        self.level = 0
        self.coins = 0
        self.enemies = List()

    def pass_level(self):
        self.level += 1

    def collect_coins(self, c):
        self.coins += c

    def collect_enemies(self, e):
        self.enemies.append(e)

    def reset_player(self):
        self.level = 0
        self.coins = 0
        self.enemies = List()
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该属性enemies是一个列表,随着玩家在游戏中的进展,该列表会附加值。

jitclass使用前两行将 jitclass 作为属性game调用: …

python jit list numba

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

标签 统计

python ×3

pandas ×2

dataframe ×1

jit ×1

list ×1

numba ×1

numpy ×1