在本文中,我们将详细介绍在python中添加两个分数的各个方面,并为您提供关于python中两个加号的相关解答,同时,我们也将为您带来关于python–使用NaN添加两个系列、python–是否有更快
在本文中,我们将详细介绍在python中添加两个分数的各个方面,并为您提供关于python中两个加号的相关解答,同时,我们也将为您带来关于python – 使用NaN添加两个系列、python – 是否有更快的方法来添加两个2-d numpy数组、Python-如何在Python中串联两个列表?、Python:在python中设置两个用逗号分隔的变量值的有用知识。
本文目录一览:- 在python中添加两个分数(python中两个加号)
- python – 使用NaN添加两个系列
- python – 是否有更快的方法来添加两个2-d numpy数组
- 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添加两个系列
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
解决方法
python – 是否有更快的方法来添加两个2-d numpy数组
编辑:我正在添加一个类似于我现在使用的示例.有没有办法加快这个?
#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)
解决方法
我们可以使用模数来模拟滚动/圈移的循环行为,并使用广播指数覆盖所有行,我们将采用完全矢量化的方法,如此 –
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中串联两个列表??
你可以使用+运算符来组合它们:
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之间的区别是什么:
a, b = c, max(a, b)
和
a = cb = max(a, b)
在同一行上设置两个变量分配有什么作用?
答案1
小编典典你的两个片段做不同的事情:有尝试a
,b
和c
等于7
,8
和9
分别。
第一个片段设置三个变量9
,8
和9
。换句话说, 在之前 将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中设置两个用逗号分隔的变量值的相关知识,请在本站寻找。
本文标签: