小编wwi*_*wii的帖子

numpy数组乘法与任意维度的数组

我有一个numpy数组A,它有形状(10,).

我也有,作为此时的,具有形状(10,3,5)一个numpy的数组B中.我想在这两者之间进行乘法以得到C,使得C [0,:,] = A [0]*B [0,:,],C [1] = A [1]*B [1 ,:,]]等

我不想用循环来解决这个问题,其中一个原因是事物的美学,另一个原因是这个代码需要非常通用.我希望用户能够输入几乎任何形状的任何B,只要前导尺寸为10.例如,我希望用户能够放入形状B(10,4).

那么:如何使用numpy实现这种乘法?谢谢.

ADDENDUM:有人问过例子.会变小.假设A是numpy数组[1,2,3],B是numpy数组[[1,2],[4,5],[7,8]].我希望两者的乘法得到[[1,2],[8,10],[21,24]]....

>>> a
array([1, 2, 3])
>>> b
array([[1, 2],
       [4, 5],
       [7, 8]])
>>> #result
>>> c
array([[ 1,  2],
       [ 8, 10],
       [21, 24]])
>>>
Run Code Online (Sandbox Code Playgroud)

python arrays numpy multiplication

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

将文件中的所有十六进制替换为十进制

我想用 .sql 文件中的十进制等效值替换所有十六进制。

我有数十万行这样的行:

INSERT INTO TEST (TEST_ID, VEHICLE_ID, TEST_TYPE_ID, TYPE_ID, NUM_TEST, TEST_DATE, HOUR_START, HOUR_END, ....) VALUES (844, 504, 3, 1, 3, CAST(0x0000991400000000 AS DateTime), CAST(0x00009914008FC76C AS DateTime), CAST(0x0000991400906924 AS DateTime), ......);
Run Code Online (Sandbox Code Playgroud)

我想使用这个 sql 文件来创建 SQLite 数据库。但 SQLite 无法识别十六进制。所以目标是替换文件的所有十六进制。

我找到了这个解决方案来替换特定的十六进制:

decimal = int("0x0000991400000000", 0)
Run Code Online (Sandbox Code Playgroud)

我发现这个解决方案可以用另一个单词替换所有出现的单词:

for line in fileinput.input():
line = re.sub('wordToReplace','newWord', line.rstrip())
Run Code Online (Sandbox Code Playgroud)

我尝试在第二个中使用第一个,但“newWord”需要一个字符串,而我给出一个 int。有什么办法可以做我想做的事?

感谢您的时间 !

python search hex replace

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

查找最后一个非零元素 3D 数组 - numpy 数组

我需要找到一种方法来执行此操作,我有一个形状数组

[ 批量大小 , 150 , 1 ]

表示batch_size的整数序列,每个序列有150个元素长,但在每个序列中添加了很多零,以便使所有序列具有相同的长度。我需要找到每个序列的最后一个非零元素,并将其放入一个数组中,该数组的形状必须是 [batch_size] 。我会尝试以下操作:

last = []
for j in range(0 , inputs.shape[0] ):
  tnew = np.array( inputs[j][:][0] )
  tnew = np.trim_zeros(tnew )
   last.append( int(tnew[-1]) )
Run Code Online (Sandbox Code Playgroud)

但我不知道是否有更好的方法来做到这一点,而不必像这样循环每个元素。

感谢您的回答和帮助。


测试数据

a = np.array([[[1],[0],[0],[0],[0],[0]],
              [[1],[2],[0],[0],[0],[0]],
              [[1],[2],[3],[0],[0],[0]],
              [[1],[2],[3],[4],[0],[0]],
              [[1],[2],[3],[4],[5],[0]]])
Run Code Online (Sandbox Code Playgroud)

python numpy

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

指定泛型集合中重写方法的类型提示

我定义了一个抽象基类BaseRepository,它充当具有指定 supertype 的项目的集合Foo。中的便利类方法BaseRepository被注释/类型暗示用于类型的对象Foo。这是一个最小的例子:

from abc import ABCMeta, abstractmethod
NoReturn = None

class Foo(object):
    pass  # simple data holding object


class BaseRepository(object, metaclass=ABCMeta):

    # May be filled with subtypes of `Foo` later
    _items = None  # type: List[Foo]

    @classmethod
    def get_item(cls) -> Foo:
        return cls._items[0]

    @classmethod
    @abstractmethod
    def _load_items(cls) -> NoReturn:
        pass
Run Code Online (Sandbox Code Playgroud)

现在有多个静态实现(例如SubRepository),每个实现都应该使用它们自己的项目类型(例如Bar),它们是原始泛型类型的子类Foo

class Bar(Foo):
    pass  # Must implement Foo in order for BaseRepository's methods to work …
Run Code Online (Sandbox Code Playgroud)

python generics collections inheritance types

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

为什么不是我的实施O(NlogN)?

我正在实施和测试这个SO问题的答案-

给定一个整数数组,找到数组中所有有序元素对的数量,其总和位于给定范围[a,b]

最赞成(当前)的答案仅提供应该为O(NlogN)的算法的文本描述:

对数组进行排序...... 对于数组中的每个元素x:考虑元素后面的数组切片.在[a - x]的数组切片上进行二进制搜索,将其称为y0.如果未找到完全匹配,请将最接近的匹配大于[a - x]视为y0.只要x + y <= b,就从y0向前输出所有元素(x,y)....如果您只需要计算对数,可以在O(nlogn)中进行.修改上述算法,以便搜索[b - x](或下一个较小的元素).

我的实施:

import bisect
def ani(arr, a, b):
    # Sort the array (say in increasing order).
    arr.sort()
    count = 0
    for ndx, x in enumerate(arr):
        # Consider the array slice after the element
        after = arr[ndx+1:]
        # Do a binary search on this array slice for [a - x], call it y0
        lower = a - x
        y0 = bisect.bisect_left(after, lower) …
Run Code Online (Sandbox Code Playgroud)

python algorithm

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

为什么这个Python脚本会删除'.txt'文件,以及所有'.tmp'文件?

我正在尝试编写一个脚本,它会自动删除特定文件夹中的所有临时文件,我注意到这个脚本也会删除该文件夹中的所有文本文件.任何人都可以解释为什么这样做?

   import os
   path = 'C:\scripts27'
   for root, dirs, files in os.walk(path):
       for currentFile in files:
           print "processing file: " + currentFile
           extensions=('.tmp')
           if any(currentFile.lower().endswith(ext) for ext in extensions):
               os.remove(os.path.join(root, currentFile))
Run Code Online (Sandbox Code Playgroud)

我在Windows 8.1 PC 64位上使用Python 2.7.10运行此脚本.

谢谢!

python os.walk python-2.7 os.path

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

从 Python 中的字典中删除键/值对

我是python的初学者。

我正在尝试从此字典中删除所有“noone:0”,因此它看起来与下面相同,但没有任何“noone:0”:

G = {'a': {'b': 10, 'c': 8, 'd': 3, 'noone': 0, 'e': 3}, 'f': {'g': 7, 'c': 5, 'h': 5, 'i': 2, 'j': 4, 'noone': 0, 'l': 2}}
Run Code Online (Sandbox Code Playgroud)

我搜索并找到了我应该实现它的所有方法,但找不到有效的方法。我试过这个无济于事:

for i in G:
    if str(G[i]) == 'noone':
        G.pop('noone', None)
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

为什么我在 pdb 内无法访问 self.&lt;method&gt;

考虑这样的代码片段:

class ABC:
    def method1(self, word):
             ...

    def method2(self):
        str_list = ['this', 'is', 'a', 'list', 'of', 'strings']
        pdb.set_trace()
        str_list = [self.method1(word) for word in str_list] ...(1)

obj = ABC()
obj.method2()
Run Code Online (Sandbox Code Playgroud)

在断点处,当我将命令复制粘贴(1)到 pdb 调试器 shell 中时,它无法执行该命令,而是给出了错误:

*** NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我理解这种行为 - 它与列表理解和类对象的范围有关吗?


PS C:\fooProjects> & C:/Python38/python.exe c:/fooProjects/tmp.py
> c:\fooprojects\tmp.py(38)method2()
-> str_list = [self.method1(word) for word in str_list]
(Pdb) [self.method1(word) for word in str_list]
*** NameError: name 'self' is not defined
(Pdb)
Run Code Online (Sandbox Code Playgroud)

python scope pdb

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

如何从链表中获取最小值或最大值?

我试图定义一个函数,可以从一个链接的int列表中获取最小值.

Given Function(not allowed to be modified):
class LN:
    def __init__(self,value,next=None):
        self.value = value
        self.next  = next

    def list_to_ll(l):
        if l == []:
           return None
        front = rear = LN(l[0])
        for v in l[1:]:
            rear.next = LN(v)
            rear = rear.next
        return front
Run Code Online (Sandbox Code Playgroud)

函数list_to_ll将普通列表转换为链表:

A recursive function I am trying to define:
def get_min(ll):
    if ll == None:
       return None
    else:
       if ll.value < ll.next.value:
          return ll.value
       return get_min(ll.next)
Run Code Online (Sandbox Code Playgroud)

例如:

get_min(list_to_ll([7, 3, 5, 2, 0]))--> 0
Run Code Online (Sandbox Code Playgroud)

但我的功能给了我:

RuntimeError: maximum recursion depth …
Run Code Online (Sandbox Code Playgroud)

python

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

while循环在python中有多个条件

weatherType = raw_input('Enter a weather type: ')

while (weatherType != "WINDDIRECTION") or (weatherType != "WINDSPEED") or (weatherType != "AIRTEMPERATURE") or (weatherType != "WAVEHEIGHT") or (weatherType != "AIRPRESSURE"):
    print "Sorry, invalid input. Please enter AIRTEMPERATURE, AIRPRESSURE, WAVEHEIGHT, WINDSPEED, or WINDDIRECTION  for a city and either WINDDIRECTION, WINDSPEED, or AIRTEMPERATURE for an off shore bouy"
    weatherType = raw_input('Enter a weather type: ')
Run Code Online (Sandbox Code Playgroud)

好了,所以用这个循环中,我试图让用户输入要么WINDDIRECTION,WINDSPEED,AIRTEMPERATURE,WAVEHEIGHT,或AIRPRESSURE.但是,即使用户输入这5个选项中的1个,我的代码仍然会进入while循环.我不知道发生了什么事.我知道我可以使用for循环(对于["WINDDIRECTION",....]中的x)但是for循环只能查看他们的输入是否是第一次是正确的,如果他们再输入错误的答案代码将继续

python while-loop multiple-conditions

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

如何从终端编辑py文件?

我正在VM通过Via工作PuTTY

通过终端,我想打开,编辑和保存.py文件。我该怎么做?

谢谢您的帮助。

terminal command-line

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

关联数组:Python vs Perl vs Awk 性能

我正在处理具有约 4 亿行和 3 列的文件。前两列是字母数字字符串,而最后一列是数字。像这样的东西:

NM_001011874.1,NM_011441.4,-0.131672299779153
Run Code Online (Sandbox Code Playgroud)

我有多个这样的文件,它们的行数和 3 列数大致相同。这些不一定基于 3 列中的任何一列进行排序。我正在尝试根据前两列的组合来组合这些文件。例如:

File 1

NM_001011874.1,XR_104537.1,-0.929524370261122
NM_001011874.1,XM_003084433.1,-0.603098764428879

File 2

NM_001011874.1,XR_104537.1,-0.11254525414
NM_001011874.1,NM_005040.1,-0.20509876488

File 3

NM_001011874.1,XR_104537.1,-0.41254525414
NM_001011874.1,NM_005040.1,-0.60509876488
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过使用前两列中的值组合来创建一个键,然后从该对的第三列中检索相应的值。我得到的最终输出是:

Output2 

NM_001011874.1,XR_104537.1,-0.11254525414,-0.929524370261122,-0.41254525414
NM_001011874.1,NM_005040.1,-0.20509876488,,-0.60509876488
Run Code Online (Sandbox Code Playgroud)

我正在使用 awk 执行上述操作:

awk -F',' 'NR==FNR{a[$1,$2]=$3;next}{$4=a[$1,$2];print}' OFS=',' file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

我为任务分配了 256GB。使用上述命令通过组合两个文件来生成输出大约需要 90 分钟,其中每个文件有大约 4 亿行和 3 列。输出文件再次有大约 4 亿行但有 4 列。每添加一列,生成输出文件所花费的时间就会增加。

我是按顺序进行的,即合并 file1 和 file2 以生成具有 4 列的 output1。然后合并 file3 和 output1 以生成具有 5 列的 output2,然后将 file4 和 output2 合并以生成具有 6 列的 output3,依此类推,直到我得到具有 22 列的最终输出。

我想知道在 Python 或 Perl 中执行此操作在速度和自动化方面是否更有效?我有大约 20 个这样的文件,每个文件有 3 …

python perl performance awk

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