GVKun编程网logo

在python中添加两个分数(python中两个加号)

10

在本文中,我们将详细介绍在python中添加两个分数的各个方面,并为您提供关于python中两个加号的相关解答,同时,我们也将为您带来关于python–使用NaN添加两个系列、python–是否有更快

在本文中,我们将详细介绍在python中添加两个分数的各个方面,并为您提供关于python中两个加号的相关解答,同时,我们也将为您带来关于python – 使用NaN添加两个系列、python – 是否有更快的方法来添加两个2-d numpy数组、Python-如何在Python中串联两个列表?、Python:在python中设置两个用逗号分隔的变量值的有用知识。

本文目录一览:

在python中添加两个分数(python中两个加号)

在python中添加两个分数(python中两个加号)

我正在尝试在python中添加两个分数

如果输入1/4 + 1/4,我期望得到1/2结果

我用__add__加法建立了一个分数类

from fractions import gcd

class fraction:
    def __init__(self,numerator,denominator):
        self.num = numerator
        self.deno = denominator
    def __add__(self,other):
        self.sumOfn = self.num + other.num
        self.sumOfd = gcd(self.deno,other.deno)
        return(self.sumOfn,self.sumOfd)



print(fraction(1,4)+fraction(1,4))

但是我得到的输出是2,4,实际上是1/2,只是没有简化。我该如何解决这个问题?

python – 使用NaN添加两个系列

python – 使用NaN添加两个系列

我正在研究“ Python For Data Analysis”,我不了解特定的功能.添加两个pandas系列对象将自动对齐索引数据,但如果一个对象不包含该索引,则返回为NaN.例如来自书:

a = Series([35000,71000,16000,5000],index=['Ohio','Texas','Oregon','Utah'])
b = Series([NaN,35000],index=['California','Ohio'])

结果:

In [63]: a
    Out[63]: Ohio          35000
             Texas         71000
             Oregon        16000
             Utah           5000
    In [64]: b
    Out[64]: California      NaN
             Texas         71000
             Oregon        16000
             Ohio          35000

当我把它们加在一起时,我得到了……

In [65]: a+b
    Out[65]: California       NaN
             Ohio           70000
             Oregon         32000
             Texas         142000
             Utah             NaN

那么为什么犹他州的价值是NaN而不是500?似乎500 NaN = 500.是什么赋予了?我错过了什么,请解释一下.

更新:

In [92]: # fill NaN with zero
             b = b.fillna(0)
             b
    Out[92]: California        0
             Texas         71000
             Oregon        16000
             Ohio          35000

    In [93]: a
    Out[93]: Ohio      35000
             Texas     71000
             Oregon    16000
             Utah       5000

    In [94]: # a is still good
             a+b
    Out[94]: California       NaN
             Ohio           70000
             Oregon         32000
             Texas         142000 
             Utah             NaN

解决方法

Pandas不假设500 NaN = 500,但很容易要求它这样做:a.add(b,fill_value = 0)

python – 是否有更快的方法来添加两个2-d numpy数组

python – 是否有更快的方法来添加两个2-d numpy数组

假设我有两个相同尺寸的大型2-d numpy数组(比如2000×2000).我想要明智地总结它们.我想知道是否有比np.add()更快的方法

编辑:我正在添加一个类似于我现在使用的示例.有没有办法加快这个?

#a and b are the two matrices I already have.Dimension is 2000x2000
#shift is also a list that is prevIoUsly kNown
for j in range(100000):
    b=np.roll(b,shift[j],axis=0)
    a=np.add(a,b)

解决方法

方法#1(矢量化)

我们可以使用模数来模拟滚动/圈移的​​循环行为,并使用广播指数覆盖所有行,我们将采用完全矢量化的方法,如此 –

n = b.shape[0]
idx = n-1 - np.mod(shift.cumsum()[:,None]-1 - np.arange(n),n)
a += b[idx].sum(0)

方法#2(Loopy one)

b_ext = np.row_stack((b,b[:-1] ))
start_idx = n-1 - np.mod(shift.cumsum()-1,n)
for j in range(start_idx.size):
    a += b_ext[start_idx[j]:start_idx[j]+n]

冒号表示法使用索引进行切片

一旦我们进入循环,这里的想法就是做最小的工作.我们在进入循环之前预先计算每次迭代的起始行索引.因此,我们在循环内部所需要做的就是使用冒号表示切片,这是一个数组视图并加起来.这应该比滚动需要计算所有那些导致副本昂贵的行索引要好得多.

在使用冒号和索引进行切片时,这里有更多关于视图和复制概念的内容 –

In [11]: a = np.random.randint(0,9,(10))

In [12]: a
Out[12]: array([8,1,7,5,6,0])

In [13]: a[3:8]
Out[13]: array([7,1])

In [14]: a[[3,4,7]]
Out[14]: array([7,1])

In [15]: np.may_share_memory(a,a[3:8])
Out[15]: True

In [16]: np.may_share_memory(a,a[[3,7]])
Out[16]: False

运行时测试

功能定义 –

def original_loopy_app(a,b):
    for j in range(shift.size):
        b=np.roll(b,axis=0)
        a += b

def vectorized_app(a,b):
    n = b.shape[0]
    idx = n-1 - np.mod(shift.cumsum()[:,n)
    a += b[idx].sum(0)

def modified_loopy_app(a,b):
    n = b.shape[0]
    b_ext = np.row_stack((b,b[:-1] ))
    start_idx = n-1 - np.mod(shift.cumsum()-1,n)
    for j in range(start_idx.size):
        a += b_ext[start_idx[j]:start_idx[j]+n]

情况1:

In [5]: # Setup input arrays
   ...: N = 200
   ...: M = 1000
   ...: a = np.random.randint(11,99,(N,N))
   ...: b = np.random.randint(11,N))
   ...: shift = np.random.randint(0,N,M)
   ...: 

In [6]: original_loopy_app(a1,b1)
   ...: vectorized_app(a2,b2)
   ...: modified_loopy_app(a3,b3)
   ...: 

In [7]: np.allclose(a1,a2) # Verify results
Out[7]: True

In [8]: np.allclose(a1,a3) # Verify results
Out[8]: True

In [9]: %timeit original_loopy_app(a1,b1)
   ...: %timeit vectorized_app(a2,b2)
   ...: %timeit modified_loopy_app(a3,b3)
   ...: 
10 loops,best of 3: 107 ms per loop
10 loops,best of 3: 137 ms per loop
10 loops,best of 3: 48.2 ms per loop

案例#2:

In [13]: # Setup input arrays (datasets are exactly 1/10th of original sizes)
    ...: N = 200
    ...: M = 10000
    ...: a = np.random.randint(11,N))
    ...: b = np.random.randint(11,N))
    ...: shift = np.random.randint(0,M)
    ...: 

In [14]: %timeit original_loopy_app(a1,b1)
    ...: %timeit modified_loopy_app(a3,b3)
    ...: 
1 loops,best of 3: 1.11 s per loop
1 loops,best of 3: 481 ms per loop

因此,我们正在考虑采用改进的循环方法进行2倍加速!

Python-如何在Python中串联两个列表?

Python-如何在Python中串联两个列表?

如何解决Python-如何在Python中串联两个列表??

你可以使用+运算符来组合它们:

listone = [1,2,3]
listtwo = [4,5,6]

joinedlist = listone + listtwo

输出:

>>> joinedlist
[1,2,3,4,5,6]

也可以创建一个生成器,使用来简单地遍历两个列表中的项目itertools.chain()。这使你可以将列表(或任何可迭代的)链接在一起进行处理,而无需将项目复制到新列表中:

import itertools
for item in itertools.chain(listone, listtwo):
    # Do something with each list item

解决方法

如何在Python中串联两个列表?

例:

listone = [1,2,3]
listtwo = [4,5,6]

预期结果:

>>> joinedlist
[1,3,4,6]

Python:在python中设置两个用逗号分隔的变量值

Python:在python中设置两个用逗号分隔的变量值

python之间的区别是什么:

a, b = c, max(a, b)

a = cb = max(a, b)

在同一行上设置两个变量分配有什么作用?

答案1

小编典典

你的两个片段做不同的事情:有尝试abc等于789分别。

第一个片段设置三个变量989。换句话说, 在之前max(a,b)计算分配给的值。本质上,所有要做的就是将两个值压入堆栈。变量,然后在弹出时将它们分配给这些值。 __a``c``a, b = c, max(a,b)``a``b

另一方面,运行第二个代码段会将所有三个变量设置为9。这是因为a被设置为指向进行c函数调用之前的值max(a, b)

关于在python中添加两个分数python中两个加号的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于python – 使用NaN添加两个系列、python – 是否有更快的方法来添加两个2-d numpy数组、Python-如何在Python中串联两个列表?、Python:在python中设置两个用逗号分隔的变量值的相关知识,请在本站寻找。

本文标签: