小编Ada*_*Er8的帖子

numpy:检查一维数组是否为另一个的子数组

给定两个通用的numpy 1-d数组(无论如何都不保证值),我需要检查一个数组是否为另一个的子数组。

通过转换为字符串可以很容易且简短,但可能不是最有效的:

import numpy as np

def is_sub_arr(a1, a2):
    return str(a2).strip('[]') in str(a1).strip('[]')

arr1 = np.array([9, 1, 3, 2, 7, 2, 7, 2, 8, 5])
arr2 = np.array([3, 2, 7, 2])
arr3 = np.array([1,3,7])

print(is_sub_arr(arr1,arr2))  # True
print(is_sub_arr(arr1,arr3))  # False
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的内置/本地numpy方法来做到这一点?

python numpy

5
推荐指数
1
解决办法
104
查看次数

计算我的 for 循环,并希望使用某些函数在没有 for 循环的情况下进行计算

dec = 0.1
data = np.array([100,200,300,400,500])
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的 for 循环

y = np.zeros(len(data))
for i in range(len(data)):
    if i == 0:
        y[i] = (1.0 - dec) * data[i]
    else:
        y[i] = (1.0 - dec) * data[i] + (dec * y[i - 1])
Run Code Online (Sandbox Code Playgroud)

输出 y 是:

array([ 90.   , 189.   , 288.9  , 388.89 , 488.889])
Run Code Online (Sandbox Code Playgroud)

现在我想在没有循环的情况下进行上述计算,所以如果我打破代码并执行

data[0] = (1.0 - dec) * data[0]
data[1:] = (1.0 - dec) * data[1:] + (dec * data[0])
Run Code Online (Sandbox Code Playgroud)

输出数据为:

array([ 90, 189, 279, 369, 459]) …
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
75
查看次数

根据其他列查找最大值

我有学生姓名、不同科目的分数、科目名称。我想在数据框中添加一列,其中包含每个学生得分最高的科目。这是数据:

输入数据为:

在此输入图像描述

输出数据(结果数据帧)将是:

在此输入图像描述

我的尝试(显然没有效果):

Data['Subject with highest score'] = Data.groupby(['Names','Subject'])[['Scores']].transform(lambda x: x.max())
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
62
查看次数

4
推荐指数
1
解决办法
1017
查看次数

以附加到列表作为结果的多处理 for 循环

我需要并行化 for 循环。我当前的代码是循环遍历从 xarray 数据集中获取的 id 列表,从 xarray 数据集中获取具有当前 id 的行数据,调用函数(计算数据的三角分布),附加结果分布将函数转换为列表,完成后,它将列表转换为 xarray 数据集,其中每个结果都链接到当前的 id,因此稍后可以通过 ID 将这个数据集附加到“主”数据集。

我的代码看起来有点像这样:

from sklearn.preprocessing import MinMaxScaler
import xarray as xr
import scipy.stats as st

function call_func(data):
   scaler = MinMaxScaler()
   norm_data = scaler.fit_transform(np.reshape(data, (len(data),1)))
   params = st.triang.fit(norm_data)
   arg,loc,scale = params[:-2],params[-2],params[-1]
   dist = st.triang(loc=loc, scale=scale, *arg)
   return dist

if __name__ == "__main__":
for id in my_dataset['id'].values:
        row_data= my_dataset.sel(id=id)['data'].values[0]
        if len(row_data)>3 and all(row_data== 0) == False:
                result = call_func(row_data)
                result_list.append(result)
        else:
            result_list.append([])

new_dataset = xr.Dataset({'id': my_dataset['id'].values,
                          'dist_data':(['id','dist'],
                           np.reshape(np.array(result_list),(len(result_list),1))) …
Run Code Online (Sandbox Code Playgroud)

python for-loop append multiprocessing python-xarray

3
推荐指数
1
解决办法
5203
查看次数

感叹号后的大写字母

我有一个字符串,必须在“!”后使用大写字母:

我编写了一个可以在一定程度上起作用的脚本,但是当最后一个字母为“!”时出现了问题。

strin "hello! there!" 

strout = []

for i in range(len(strin)):     
    if strin[i-2] == '!':
        strout.append((strin[i]).capitalize())

    else:
        strout.append(strin[i])
    strout[0] = strout[0].capitalize()

newStr = "".join(strout)
Run Code Online (Sandbox Code Playgroud)

输出是:你好!那里!


如何防止第二个字母大写。
原因[i-2]是每当循环遇到“!” 在文本中间,它大写字母i

python letter capitalize

2
推荐指数
1
解决办法
52
查看次数

Python 3.6 - 使用异步函数进行过滤

这是非常基本的问题,但找不到相关的好信息。

当我想用来过滤元素的函数是异步的时,如何使用内置的过滤函数?

例子:

import asyncio


async def not_one(item):
    if item == 1:
        await asyncio.sleep(1)  # Just to give an asyc feel.. 
        return False
    return True


async def main():
    org_list = [1, 2, 3]

    # IMPLEMENTATION #1 - WITHOUT USING FILTER
    without_one_list = []
    for item in org_list:
        is_one = await not_one(item)
        if is_one:
            without_one_list.append(item)

    print(without_one_list)  # [2, 3]

    # NOT WORKING #1 - not_one was never awaited
    without_one_list = list(filter(not_one, org_list))

    # NOT WORKING #2 - not a valid syntax …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-3.6

2
推荐指数
1
解决办法
2359
查看次数

Python3:字典构造函数是否创建深层副本?

我试图理解 Python3 中浅复制与深复制的概念。

从下面的代码中我发现 dict2 中所做的更改没有反映在 dict1 中。

1>>> dict1 = {1:[1,2]}
2>>> dict2 = dict(dict1)
3>>> dict2[1]=[1,2,3]
4>>> dict1,dict2
({1: [1, 2]}, {1: [1, 2, 3]})
Run Code Online (Sandbox Code Playgroud)

我是否正确理解上面代码中的第 2 行创建了深层副本?

python deep-copy python-3.x

2
推荐指数
1
解决办法
333
查看次数

使用新键从现有字典创建新字典

我有一个字典d,我想修改键并创建一个新字典。最好的方法是什么?

这是我现有的代码:

import json

d = json.loads("""{
    "reference": "DEMODEVB02C120001",
    "business_date": "2019-06-18",
    "final_price": 40,
    "products": [
        {
            "quantity": 4,
            "original_price": 10,
            "final_price": 40,
            "id": "123"
        }
    ]
}""")

d2 ={
        'VAR_Reference':d['reference'],
        'VAR_date': d['business_date'],
        'VAR_TotalPrice': d['final_price']
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法可以使用另一个映射字典或可以保留映射值的文件来映射值。

例如:

d3 =  {
        'reference':'VAR_Reference',
        'business_date': 'VAR_date',
        'final_price': 'VAR_TotalPrice'
     }
Run Code Online (Sandbox Code Playgroud)

感谢任何提示或提示。

python python-3.x python-3.7

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