小编cs9*_*s95的帖子

如何实现numpy的花哨索引?

我正在对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)

这提出了几个问题:

  1. 哪个__xx__方法有numpy覆盖/定义来处理花哨的索引?
  2. 为什么python列表本身不支持花式索引?

(额外的问题:为什么我的时间显示python2中的切片比python3慢?)

python arrays indexing numpy

22
推荐指数
2
解决办法
2647
查看次数

计算列表的累积总和,直到出现零

我有一个(长)列表,其中0和1随机出现:

list_a = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

我想得到list_b

我可以按如下方式实现:

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)

python binary performance list cumsum

22
推荐指数
4
解决办法
3958
查看次数

使用具有词典理解的收益率

作为一个人为的例子:

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'},这似乎是我想在这里做的.

python yield generator

21
推荐指数
1
解决办法
7719
查看次数

使用monotonically_increasing_id()将行号分配给pyspark数据帧

我使用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,而其他数据帧包含与行对应的不同记录

python indexing merge pyspark

21
推荐指数
2
解决办法
3万
查看次数

IndexError:列表索引超出范围和python

我告诉我的程序打印输出的第53行.这个错误告诉我没有那么多行,因此无法打印出来吗?

python list indexoutofboundsexception

20
推荐指数
4
解决办法
31万
查看次数

使用python将多个文本文件合并为一个文本文件

假设我们有许多文本文件,如下所示:

文件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)

在这之后?有帮助吗?

python

20
推荐指数
3
解决办法
7万
查看次数

没有Numpy的矩阵求逆

我想在不使用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)

python matrix inverse numba

20
推荐指数
4
解决办法
3万
查看次数

动态过滤pandas数据帧

我正在尝试使用三列的阈值来过滤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)

python exec filter dataframe pandas

20
推荐指数
2
解决办法
5867
查看次数

在列表列表中调整值

我有一份A长度列表清单m.每个列表都A包含正数{1, 2, ..., n}.以下是一个例子,其中m = 3n = 4.

A = [[1, 1, 3], [1, 2], [1, 1, 2, 4]]
Run Code Online (Sandbox Code Playgroud)

我是代表每个数字xA为一对(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)

python sorting list

20
推荐指数
2
解决办法
853
查看次数

使用增量值有效地创建新列

我正在创建一个包含增量值的列,然后在列的开头添加一个字符串.当用于大数据时,这非常慢.请为此建议更快更有效的方法.

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)

python performance numpy pandas

19
推荐指数
4
解决办法
981
查看次数