我正在对2D列表和numpy数组进行一些实验.由此,我提出了3个问题,我很想知道答案.
首先,我初始化了一个2D python列表.
>>> my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用元组索引列表.
>>> my_list[:,]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple
Run Code Online (Sandbox Code Playgroud)
由于解释器抛出一个TypeError而不是一个SyntaxError,我猜测它实际上可以这样做,但是python本身并不支持它.
然后我尝试将列表转换为numpy数组并执行相同的操作.
>>> np.array(my_list)[:,]
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)
当然没问题.我的理解是,其中一个__xx__()方法已被覆盖并在numpy包中实现.
Numpy的索引也支持列表:
>>> np.array(my_list)[:,[0, 1]]
array([[1, 2],
[4, 5],
[7, 8]])
Run Code Online (Sandbox Code Playgroud)
这提出了几个问题:
__xx__方法有numpy覆盖/定义来处理花哨的索引?(额外的问题:为什么我的时间显示python2中的切片比python3慢?)
我有一个(长)列表,其中0和1随机出现:
list_a = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)
我想得到list_b
如果出现0,则在列表中保留0
list_b = [1, 2, 3, 0, 1, 2, 0, 1, 0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)我可以按如下方式实现:
list_b = []
for i, x in enumerate(list_a):
if x == 0:
list_b.append(x)
else:
sum_value = 0
for j in list_a[i::-1]:
if j != 0:
sum_value += j
else:
break
list_b.append(sum_value)
print(list_b)
Run Code Online (Sandbox Code Playgroud)
但实际列表的长度很长.
所以,我想改进高速代码.(如果不可读)
我改变了这样的代码:
from itertools import takewhile
list_c = [sum(takewhile(lambda x: x != 0, list_a[i::-1])) …Run Code Online (Sandbox Code Playgroud) 作为一个人为的例子:
myset = set(['a', 'b', 'c', 'd'])
mydict = {item: (yield ''.join([item, 's'])) for item in myset}
Run Code Online (Sandbox Code Playgroud)
并list(mydict)给出:
['as', 'cs', 'bs', 'ds', {'a': None, 'b': None, 'c': None, 'd': None}]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?怎么yield办?无论表达式yield如何,这种行为是否一致?
注意:我知道做的mydict = {item: ''.join([item, 's']) for item in myset}会给字典{'a': 'as', 'b': 'bs', 'c': 'cs', 'd': 'ds'},这似乎是我想在这里做的.
我使用monotonically_increasing_id()使用以下语法将行号分配给pyspark数据帧:
df1 = df1.withColumn("idx", monotonically_increasing_id())
Run Code Online (Sandbox Code Playgroud)
现在df1有26,572,528条记录.所以我期待idx值从0-26,572,527.
但是当我选择max(idx)时,它的值非常大:335,008,054,165.
这个功能发生了什么?使用此函数与具有相似记录数的其他数据集合并是否可靠?
我有大约300个数据帧,我想将它们组合成一个数据帧.因此,一个数据帧包含ID,而其他数据帧包含与行对应的不同记录
我告诉我的程序打印输出的第53行.这个错误告诉我没有那么多行,因此无法打印出来吗?
假设我们有许多文本文件,如下所示:
文件1:
abc
def
ghi
Run Code Online (Sandbox Code Playgroud)
文件2:
ABC
DEF
GHI
Run Code Online (Sandbox Code Playgroud)
文件3:
adfafa
Run Code Online (Sandbox Code Playgroud)
文件4:
ewrtwe
rewrt
wer
wrwe
Run Code Online (Sandbox Code Playgroud)
我们如何制作一个如下文本文件:
结果:
abc
def
ghi
ABC
DEF
GHI
adfafa
ewrtwe
rewrt
wer
wrwe
Run Code Online (Sandbox Code Playgroud)
相关代码可能是:
import csv
import glob
files = glob.glob('*.txt')
for file in files:
with open('result.txt', 'w') as result:
result.write(str(file)+'\n')
Run Code Online (Sandbox Code Playgroud)
在这之后?有帮助吗?
我想在不使用numpy.linalg.inv的情况下反转矩阵.
原因是我使用Numba加速代码,但是不支持numpy.linalg.inv,所以我想知道我是否可以使用'经典'Python代码反转矩阵.
使用numpy.linalg.inv,示例代码如下所示:
import numpy as np
M = np.array([[1,0,0],[0,1,0],[0,0,1]])
Minv = np.linalg.inv(M)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用三列的阈值来过滤pandas数据帧
import pandas as pd
df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
"B" : [2, 5, 3, 2, 6],
"C" : [-5, 2, 1, 8, 2]})
df = df.loc[(df.A > 0) & (df.B > 2) & (df.C > -1)].reset_index(drop = True)
df
A B C
0 2 5 2
1 10 3 1
2 3 6 2
Run Code Online (Sandbox Code Playgroud)
但是,我想在一个函数中执行此操作,其中列的名称及其阈值在字典中提供给我.这是我的第一次尝试,运作正常.基本上我将过滤器放在cond变量中并运行它:
df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
"B" : [2, 5, 3, 2, 6],
"C" : …Run Code Online (Sandbox Code Playgroud) 我有一份A长度列表清单m.每个列表都A包含正数{1, 2, ..., n}.以下是一个例子,其中m = 3和n = 4.
A = [[1, 1, 3], [1, 2], [1, 1, 2, 4]]
Run Code Online (Sandbox Code Playgroud)
我是代表每个数字x中A为一对(i, j),其中A[i][j] = x.我想A按非递减顺序对数字进行排序; 以最低的第一指数打破关系.也就是说,如果A[i1][j1] == A[i2][j2],那么iff (i1, j1)之前.(i2, j2)i1 <= i2
在这个例子中,我想返回对:
(0, 0), (0, 1), (1, 0), (2, 0), (2, 1), (1, 1), (2, 2), (0, 2), (2, 3)
Run Code Online (Sandbox Code Playgroud)
它代表排序的数字
1, 1, …Run Code Online (Sandbox Code Playgroud) 我正在创建一个包含增量值的列,然后在列的开头添加一个字符串.当用于大数据时,这非常慢.请为此建议更快更有效的方法.
df['New_Column'] = np.arange(df[0])+1
df['New_Column'] = 'str' + df['New_Column'].astype(str)
Run Code Online (Sandbox Code Playgroud)
id Field Value
1 A 1
2 B 0
3 D 1
Run Code Online (Sandbox Code Playgroud)
id Field Value New_Column
1 A 1 str_1
2 B 0 str_2
3 D 1 str_3
Run Code Online (Sandbox Code Playgroud)