私信  •  关注

Daniel Mesejo

Daniel Mesejo 最近创建的主题
Daniel Mesejo 最近回复了
5 年前
回复了 Daniel Mesejo 创建的主题 » 在Python中从多维数组中删除行

如果我理解正确,你可以这样做:

import numpy as np

a = np.array([[1, 1, 0, 0, 1],
              [0, 0, 1, 1, 1],
              [0, 1, 0, 1, 1],
              [1, 0, 1, 0, 1],
              [0, 0, 1, 0, 1],
              [1, 0, 1, 0, 0]])

left = np.count_nonzero(a[:, :2], axis=1) != 0
a = a[left]

right = np.count_nonzero(a[:, -2:], axis=1) != 0
a = a[right]

print(a)

输出

[[1 1 0 0 1]
 [0 1 0 1 1]
 [1 0 1 0 1]]

或者,一个较短的版本:

left = np.count_nonzero(a[:, :2], axis=1) != 0
right = np.count_nonzero(a[:, -2:], axis=1) != 0
a = a[(left & right)]
4 年前
回复了 Daniel Mesejo 创建的主题 » 在python中用元组值计算两个字典的点积

计算上的值的doc乘积 dict_of_search VS dict_of_items ,您可以:

def prod(source, target):
    return sum(source.get(key, 0) * target.get(key, 0) for key in source.keys() | target.keys())


dict_of_items = {1: [('dog', 3), ('bird', 0)], 2: [('egret', 2), ('cat', 3), ('bird', 0), ('aardvark', 1)],
                 3: [('fish', 6), ('bird', 0), ('dog', 1), ('aardvark', 5)],
                 4: [('fish', 6), ('bird', 0), ('dog', 1), ('aardvark', 2)], 5: [('egret', 4), ('bird', 0)],
                 6: [('bird', 0)], 7: [('dog', 5), ('bird', 0)], 8: [('bird', 0), ('aardvark', 1)]}

dict_of_search = {1: [('bird', 0), ('dog', 1), ('cat', 3)]}

for k, v in dict_of_items.items():
    for se in dict_of_search.values():
        print(k, prod(dict(v), dict(se)))

产量

1 3
2 9
3 1
4 1
5 0
6 0
7 5
8 0

如果要将结果存储在字典中,请执行以下操作:

result = {}
for k, v in dict_of_items.items():
    for se in dict_of_search.values():
        result[k] = prod(dict(v), dict(se))

print(result)

产量

{1: 3, 2: 9, 3: 1, 4: 1, 5: 0, 6: 0, 7: 5, 8: 0}
5 年前
回复了 Daniel Mesejo 创建的主题 » 如何在python中生成词频矩阵

因为你用 machine-learning ,我建议您使用 sklearn.CountVectorizer :

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

corpus = ['He is a good person',
          'He is bad student',
          'He is hardworking']
df = pd.DataFrame(data=corpus, columns=['sentences'])

vectorizer = CountVectorizer(vocabulary=['he', 'is', 'a', 'good', 'person', 'bad', 'student', 'hardworking'], min_df=0,
                             stop_words=frozenset(), token_pattern=r"(?u)\b\w+\b")
X = vectorizer.fit_transform(df['sentences'].values)
result = pd.DataFrame(data=X.toarray(), columns=vectorizer.get_feature_names())
print(result)

产量

   he  is  a  good  person  bad  student  hardworking
0   1   1  1     1       1    0        0            0
1   1   1  0     0       0    1        1            0
2   1   1  0     0       0    0        0            1
5 年前
回复了 Daniel Mesejo 创建的主题 » 修改列表中包含特定数字(而不仅仅是字符)的元素的python方法

假设可能有两位数以上的数字,则代码会被窃听,例如:

IR = ['5xy', '51y', '-2x']
result = [(e[0]+e[2:]) if (e[1]== '1' and e[2].isalpha() ) else e for e in IR ]
print(result)

返回:

['5xy', '5y', '-2x']

一个可能更像蟒蛇的方法是使用一个函数来代替:

def transform(e):
    multiplier = ''.join(c for c in e if c.isnumeric())
    return e[0] + e[2:] if multiplier == '1' else e


IR = ['5xy', '51y', '-2x']
result = [transform(e) for e in IR]
print(result)

IR = ['5xy', '+1y', '-2x']
result = [transform(e) for e in IR]
print(result)

产量

['5xy', '51y', '-2x']
['5xy', '+y', '-2x']

注意,transforms假设数字是整数,但是可以很容易地修改为包括float(只包括对 . )

5 年前
回复了 Daniel Mesejo 创建的主题 » 在python中读取文件时如何将值组合在一起

基于@jacobirr注释并考虑空白,您可以执行以下操作:

content = "12.345, 23.456, 34.567"
result = [s.strip() for s in content.split(",")]
print(result)

产量

['12.345', '23.456', '34.567']

或者作为替代:

content = "12.345, 23.456, 34.567"
result = list(map(str.strip, content.split(",")))
print(result)

产量

['12.345'、'23.456'、'34.567']
4 年前
回复了 Daniel Mesejo 创建的主题 » 如何在python中简化变量的分数值

正如@prune提到的,必须将变量的值转换为字符串,另一种方法是使用 f-string :

from fractions import Fraction
b = 0.45
print(Fraction(f'{b}'))

建议的文档解决方案是 limit_denominator :

b = 0.45
print(Fraction(b).limit_denominator())

产量

9/20

有关浮点的详细信息,请参见 this .

5 年前
回复了 Daniel Mesejo 创建的主题 » 基于元素名对python中长列表的元素进行分组

你可以使用 itertools.groupby 这样地:

from itertools import groupby

list3 = ['20180406_145813_4_1.jpg',
         '20180406_145813_5_1.jpg',
         '20180406_145813_6_1.jpg',
         '20180406_175827_10_12.jpg',
         '20180406_175827_11_12.jpg',
         '20180409_190651_7_2.jpg',
         '20180409_190651_8_2.jpg']

result = [list(group) for _, group in groupby(list3, key=lambda x: x.split('_')[3])]
print(result)

产量

[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], ['20180406_175827_10_12.jpg', '20180406_175827_11_12.jpg'], ['20180409_190651_7_2.jpg', '20180409_190651_8_2.jpg']]

以上 list comprehension 相当于 for 循环:

result = []
for _, group in groupby(list3, key=lambda x: x.split('_')[3]):
    result.append(list(group))
5 年前
回复了 Daniel Mesejo 创建的主题 » python转置numpy数组[复制]

可以添加新轴:

import numpy as np

A = np.array([1, 2, 3, 4])
A = A[:, np.newaxis]
print(A)

产量

[[1]
 [2]
 [3]
 [4]]
5 年前
回复了 Daniel Mesejo 创建的主题 » 基于python中的条件创建一个列表以创建一个唯一的列表

使用 groupby :

from itertools import groupby
from operator import itemgetter

a = [0, 0, 0, 1, 1, 1, 3, 3, 3]
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

output = [list(map(itemgetter(1), group)) for _, group in groupby(zip(a, b), key=itemgetter(0))]
print(output)

产量

[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]