class my_class(object):
def __init__(self):
self.ref = 0
self.ask = 0
self.added = self.ref + self.ask
inst = my_class()
inst.ref = 5
inst.ask = 7
print(inst.ref + inst.ask)
print(inst.added)
Run Code Online (Sandbox Code Playgroud)
我想print(inst.added)返回12但它返回0
我知道如果列表中的元素没有特定的大小,如何删除它:
x = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2],[1,2,3],[1,2,3],[1,2,3,4]]
y = [s for s in x if len(s) == len(x[0])]
Run Code Online (Sandbox Code Playgroud)
x原始列表在哪里,y是新列表.正如你在第一个中看到的那样,有一个条目不像其他条目那么长,而一个条目比其他条目长.
我想删除一个元素,每次它与列表中的大多数元素的长度不同.只要列表中的第一个元素与大多数元素具有相同的长度,显示的方法就可以工作.
所以问题是如何获得最常见的元素长度?没有循环迭代的长度.平均值不起作用,因为平均值不代表大部分长度而是元素的平均长度(例如长度3,3,3,30将给出平均值~10,而长度的主要值为3).
我遇到了一个我不太明白的错误.如果我有以下代码段:
class Test(object):
def __init__(self):
self.data = {}
def update_data(self, **update):
self.data = update
t = Test()
t.update_data(test='data') # Works
t.update_data({'test':'data'}) # TypeError: update_data() takes 1 positional argument but 2 were given
Run Code Online (Sandbox Code Playgroud)
所以根据我的理解,**update语法是字典破坏语法,当你将dict传递给函数时,它会被转换为关键字参数.
我在这里不正确地理解了什么?
我想要一个易于读取访问多维numpy数组的某些部分.对于任何访问第一个维度的数组都是easy(b[index]).另一方面,访问第六维是"硬"(特别是阅读).
b[:,:,:,:,:,index] #the next person to read the code will have to count the :
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?特别是有一种方法,在编写程序时轴是不知道的吗?
编辑:索引维度不一定是最后一个维度
注意:我不确定这是否重复-请让我知道是否重复(并结束问题)。
如果有一个一维NumPy数组vector,则如果编写形式为以下形式的for循环:
for element in vector :
print(element)
Run Code Online (Sandbox Code Playgroud)
结果将打印NumPy数组的每个元素。
如果有一个二维NumPy数组matrix,则如果编写一个for循环,其形式为:
for vector in matrix :
print(vector)
Run Code Online (Sandbox Code Playgroud)
结果将打印二维NumPy数组的每一行,即它将打印一维NumPy数组,并且不会单独打印数组的每个元素。
但是,如果将for循环写为:
import numpy
for element in numpy.nditer(matrix) :
print(element)
Run Code Online (Sandbox Code Playgroud)
结果将打印二维NumPy数组的每个元素。
问题:如果拥有3维NumPy数组会发生什么tensor?
一种。如果编写以下形式的for循环:
for unknownType in tensor :
print(unknownType)
Run Code Online (Sandbox Code Playgroud)
这会打印出组成的二维NumPy(子)数组tensor吗?
即对于n维NumPy数组nArray,是否for unknownType in nArray :迭代组成n(N-1)维的NumPy(子)数组nArray?
b。如果编写以下形式的for循环:
for unknownType in numpy.nditer(tensor) :
print(unknownType)
Run Code Online (Sandbox Code Playgroud)
这会印出的元素tensor吗?还是会打印组成的二维二维NumPy(子)数组的组成一维NumPy(子)数组tensor?
即对于n维NumPy数组nArray,是否for unknownType in …
我知道我可以通过这样做在python dict中添加一个新的键/值
some_dict['absent_key'] = somevalue
Run Code Online (Sandbox Code Playgroud)
但我真的不了解内部工作.
我曾经认为字典表现得像C++地图.如果[]操作符不存在,则为给定键创建元素,然后返回对它的引用,以便可以在运算符的同一行中为其赋值=.
但是,C++中的这种行为的结果是,如果我们从映射中查询不存在的键的值,则会为该键创建该元素,并返回值类型的默认值而不是错误.在python中,这会抛出一个KeyError.
所以我不明白的是:如何,因为[]运算符必须=在python 之前进行评估(我认为?),它的行为会有所不同,这取决于结果是读取还是分配了一个值(它不应该在那里知道)表达式评价的要点)?
python评估表达式的顺序有区别吗?或者解释器只是更聪明,因为字典是一个硬编码类型,所以它更准确地知道它的行为,而std :: map是在'库'中,所以编译器可以假设更少?还是其他一些原因?
问:编写一个返回数组中第二大数字的算法
a = [1, 2, 3, 4, 5]
print(max([x for x in a if x != max(a)]))
>> 4
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚这个算法是如何工作的,以及pythons内部魔术是否会使它像写一个线性算法一样高效,这个算法只是在列表上循环a一次并存储最高和第二高的值.
如我错了请纠正我:
呼吁max(a)将是O(n)
[x for x in a] 也是O(n)
python是否足够智能来缓存值,max(a)或者这是否意味着算法的列表理解部分是O(n ^ 2)?
然后最终max([listcomp])将是另一个O(n),但这只会在理解完成后运行一次,所以最终算法将是O(n ^ 2)?
内部是否有任何花哨的业务会缓存该max(a)值并导致该算法的运行速度比O(n ^ 2)快?
考虑两个DataFrames d1和d2:
d1 = pd.DataFrame(np.arange(2).reshape(-1, 2), columns=['A', 'B'])
d2 = pd.DataFrame(dict(A=[0], B=list('a')))
Run Code Online (Sandbox Code Playgroud)
我想覆盖第一列d1.它开始于:
d1
A B
0 0 1
Run Code Online (Sandbox Code Playgroud)
我试图覆盖以下的值'A':
d1.values[:, 0] = 2
d1
A B
0 2 1
Run Code Online (Sandbox Code Playgroud)
但是当我做同样的事情时d2,我会得到不同的结果.
d2
A B
0 0 a
Run Code Online (Sandbox Code Playgroud)
然后:
d2.values[:, 0] = 2
d2
A B
0 0 a
Run Code Online (Sandbox Code Playgroud)
没有什么改变,除非我这样做:
d2.A.values[:] = 2
d2
A B
0 2 a
Run Code Online (Sandbox Code Playgroud)
为什么这种行为不一致?
我正在尝试将2D表面适合数据。更具体地说,我想找到一个将像素坐标映射到波长坐标的函数,就像FITCOORDS在IRAF中一样。
举例来说,我想test在以下代码片段中找到适合数组的内容:
import numpy as np
from astropy.modeling.models import Chebyshev2D
from astropy.modeling.fitting import LevMarLSQFitter
#%%
test = np.array([[7473, 7040, 6613, 6183, 5753, 5321, 4888],
[7474, 7042, 6616, 6186, np.nan, 5325, 4893],
[7476, 7044, 6619, 6189, 5759, 5328, 4897],
[7479, 7047, np.nan, 6192, 5762, 5331, 4900]])
grid_pix, grid_wave = np.mgrid[:4, :7]
fitter = LevMarLSQFitter()
c2_init = Chebyshev2D(x_degree=3, y_degree=3)
c2_fit = fitter(c2_init, grid_wave, grid_pix, test)
print(c2_fit)
Run Code Online (Sandbox Code Playgroud)
ResultI 在Python 3.6 上astropy 2.0.2和numpy 1.13.3以下:
Model: Chebyshev2D …Run Code Online (Sandbox Code Playgroud) 当我尝试np.empty在用 numba 编译的函数定义中使用时遇到了这个奇怪的错误,并打开nopython=True以确保优化的输入有效。
这很奇怪,因为 numba 声称支持np.empty前两个参数,而我只使用前两个参数(我认为正确吗?),所以我不知道为什么它输入不正确。
@jit(nopython=True)
def empty():
return np.empty(5, np.float)
Run Code Online (Sandbox Code Playgroud)
在 ipython notebook 中定义上述函数后,
empty()
Run Code Online (Sandbox Code Playgroud)
给出以下错误消息:
@jit(nopython=True)
def empty():
return np.empty(5, np.float)
Run Code Online (Sandbox Code Playgroud)