小编Kev*_*n91的帖子

为什么尽管复杂度比转换层少,但在全连接层上花费的时间最多?

在做CNN基准测试时,我发现大部分时间都花在完全连接的层上。但是,在计算计算复杂度时,我发现:

O(conv) = N*(D * (W+P) * (H+P) *  h *w)/S
O(fully_connected) = D*W*H*N
Run Code Online (Sandbox Code Playgroud)

哪里

D = Dimensions Input 
W,w = Width Input, width Filter
H, h = Height Input, height Filter
S = Stride
P = Padding
N = number of outputs
Run Code Online (Sandbox Code Playgroud)

例如,我有一个1024x11x11 feature map input DxWxH,一个5x5 filter h,w不带padding p,带有Stride S of 1,和number of outputs N shall be 512

这导致对卷积进行以下计算:

O(转化)= 512 *(1024 * 11 * 11 * 5 * 5)/ …

complexity-theory convolution neural-network deep-learning caffe

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

每隔n次删除numpy数组中的一系列元素

我知道如何删除numpy数组中的每个第4个元素:

frame = np.delete(frame,np.arange(4,frame.size,4))
Run Code Online (Sandbox Code Playgroud)

现在,我想知道是否有一个简单的命令可以删除每n个(例如4个)乘以3个值。

一个基本的例子:

输入:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ....]

会导致:

输出:[1,2,3,7,8,9,13,14,15,19,20,....]

我希望有一个简单的numpy / python功能,而不是编写必须在向量上进行迭代的函数(因为在我看来,这很长,...)。

谢谢您的帮助

python arrays numpy

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

如果URL以"blob:"开头,如何使用Python 3/Selenium下载图像?

使用web.whatsapp.de时,可以看到收到的图片的链接可能如下所示:

blob:https://web.whatsapp.com/3565e574-b363-4aca-85cd-2d84aa715c39
Run Code Online (Sandbox Code Playgroud)

如果将链接复制到地址窗口,它将打开图像,但是 - 如果省略"blob" - 它将只打开一个新的web whatsapp窗口.

我正在尝试下载此链接显示的图像.

但是使用常见的技术,例如使用request,urllib.request甚至BeautifulSoup总是在某一点上挣扎:url开头的"blob"会抛出错误.

这些答案使用Python从Blob URL下载文件 将显示错误

URLError: <urlopen error unknown url type: blob>
Run Code Online (Sandbox Code Playgroud)

或错误

InvalidSchema: No connection adapters were found for 'blob:https://web.whatsapp.com/f50eac63-6a7f-48a4-a2b8-8558a9ffe015'
Run Code Online (Sandbox Code Playgroud)

(使用BeatufilSoup)

使用原生方法,如:

import requests

url = 'https://web.whatsapp.com/f50eac63-6a7f-48a4-a2b8-8558a9ffe015'
fileName = 'test.png'
req = requests.get(url)
file = open(fileName, 'wb')
for chunk in req.iter_content(100000):
    file.write(chunk)
file.close()
Run Code Online (Sandbox Code Playgroud)

只会导致与使用BeautifulSoup相同的错误.

我在Python中使用Selenium控制Chrome,但是我无法使用提供的链接正确下载图像.

javascript python url selenium whatsapp

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

在python中通过其id更新变量

我知道如何通过 Python 中的 id 获取变量的值,例如:

a = "hello world!"
ctypes.cast(id(a), ctypes.py_object).value
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以通过 id 覆盖变量值?

最简单的方法,这个:

ctypes.cast(id(a), ctypes.py_object).value = "new value"
Run Code Online (Sandbox Code Playgroud)

不起作用。

python ctypes pointers

5
推荐指数
2
解决办法
1078
查看次数

在Python中的线程内创建线程

我正在使用线程库,并且希望有一个线程可以调用多个线程。该程序的背景是我有一个摄像头,可以捕获Image并使它们在TCP-SocketServer的类中可用。

因此,我需要一个运行相机捕获的线程和另一个运行TCPServer的线程,但是在此线程中,每个进入的连接都有多个线程。

最后一个线程意味着我需要一个可以自己创建线程的线程。不幸的是,这没有用。

我设法将巨大的代码分解成一个小片段,代表了问题所在:

import threading

def adder(x,res,i):
        res[i] = res[i] + x*i;

def creator(a,threads,results):
    results = []
    for i in range(0,a):
        results.append(0)
        threads.append(threading.Thread(target=adder,args=(a,results,i)))
        threads[i].start()
    for i in range(0,len(threads)):
        threads[i].join()

    return results;


threads = [];
results = [];

mainThread = threading.Thread(target=creator,args=([5,threads,results]))
mainThread.start()

mainThread.join()
for i in range(0,len(results)):
    print results[i]
    print threads[i]
Run Code Online (Sandbox Code Playgroud)

creator称为线程的函数中,应该使用funciton创建多个线程adder

但是结果是空的,为什么会这样呢?

这是我的较大程序中发生的相同问题。

python multithreading

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

在C中定义enum的数据类型以用于内存

我找不到这个问题的直接答案,但是是否可以enum在 C 中强制使用某种数据类型?

例如,我有一个enum状态机,它只保存一些状态,因此对于内存和性能问题,将 an 定义enum为字节或更短的数据类型会很好。有没有办法在 C 语言甚至 Arduino IDE 中提供这种行为?

任何帮助表示赞赏

c enums arduino state-machine

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

使用Python中的默认值与输入参数混合

我有这样的功能:

def CreateURL(port=8082,ip_addr ='localhost',request='sth'):
    return str("http://" + ip_addr+":"+str(port) + '/' + request)
Run Code Online (Sandbox Code Playgroud)

现在我想使用默认参数port,request但不是ip_addr.在这种情况下如何编写函数?

CreateURL('192.168.2.1')
Run Code Online (Sandbox Code Playgroud)

不起作用,因为它会覆盖port而不是ip_addr

python default function default-value

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

在 Python 中的 SimpleHTTP Server 上强制重新加载

我有一个用 Python 实现的非常简单的 HTTPServer。代码如下:

import SimpleHTTPServer
import SocketServer as socketserver
import os
import threading

class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    path_to_image = 'RGBWebcam1.png'
    img = open(path_to_image, 'rb')
    statinfo = os.stat(path_to_image)
    img_size = statinfo.st_size
    print(img_size)

def do_HEAD(self):
    self.send_response(200)
    self.send_header("Content-type", "image/png")
    self.send_header("Content-length", img_size)
    self.end_headers()

def do_GET(self):
    self.send_response(200)
    self.send_header("Content-type", "image/png")
    self.send_header("Content-length", img_size)
    self.end_headers() 
    f = open(path_to_image, 'rb')
    self.wfile.write(f.read())
    f.close()         

class MyServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    def __init__(self, server_adress, RequestHandlerClass):
        self.allow_reuse_address = True
        socketserver.TCPServer.__init__(self, server_adress, RequestHandlerClass, False)

if __name__ == "__main__":
    HOST, PORT = "192.168.2.10", 9999
    server = MyServer((HOST, PORT), MyHandler) …
Run Code Online (Sandbox Code Playgroud)

python refresh simplehttpserver

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

删除列表中与大多数条目长度不同的元素

我知道如果列表中的元素没有特定的大小,如何删除它:

x = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2],[1,2,3],[1,2,3],[1,2,3,4]]
y = [s for s in x if len(s) == len(x[0])]
Run Code Online (Sandbox Code Playgroud)

x原始列表在哪里,y是新列表.正如你在第一个中看到的那样,有一个条目不像其他条目那么长,而一个条目比其他条目长.

我想删除一个元素,每次它与列表中的大多数元素的长度不同.只要列表中的第一个元素与大多数元素具有相同的长度,显示的方法就可以工作.

所以问题是如何获得最常见的元素长度?没有循环迭代的长度.平均值不起作用,因为平均值不代表大部分长度而是元素的平均长度(例如长度3,3,3,30将给出平均值~10,而长度的主要值为3).

python list

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

在MATLAB中围绕其中心旋转图像矩阵

假设我有一个2x2矩阵,其中填充了代表平面的值.现在我想在"z方向"中以三维方式围绕自身旋转平面.为了更好地理解,请参见下图:

在此输入图像描述

我想知道这是否可以通过一个简单的仿射矩阵,因此我创建了以下简单的脚本:

%Create a random value matrix
A = rand*ones(200,200);

%Make a box in the image
A(50:200-50,50:200-50) = 1;
Run Code Online (Sandbox Code Playgroud)

现在我可以通过这样的旋转矩阵在二维房间中应用变换:

R = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = affine3d(R);
transformed = imwarp(A,tform);
Run Code Online (Sandbox Code Playgroud)

但是,这不会产生上面所需的输出,我不太确定如何创建2-D仿射矩阵来创建这样的行为.

我猜三维仿射矩阵可以做到这一点.但是,如果我定义一个3-D仿射矩阵,我就不能再使用矩阵的二维表示,因为MATLAB会抛出错误:

The number of dimensions of the input image A must be 3 when the
specified geometric transformation is 3-D.
Run Code Online (Sandbox Code Playgroud)

那么如何用仿射矩阵编码所需的输出呢?

matlab image matrix affinetransform

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

在base64编码后恢复表示图像的numpy数组

在图像上使用 base64 编码可以将图像完全恢复到其原始形状,包括其所有维度(2D、RGB),而无需直接知道分辨率——它们存储在 base64 信息中

但是,当我有一个表示图像的 numpy 数组时,例如:

test_image = np.random.rand(10,10,3)
Run Code Online (Sandbox Code Playgroud)

然后将其放入 base64 中:

b64_test_image = base64.b64encode(test_image)
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式返回数组的内容:

decoded = base64.b64decode(b64_test_image)
test_image_1D = np.frombuffer(decoded)
Run Code Online (Sandbox Code Playgroud)

然而,与test_image_1D具有维度 的原始图像相比,它只是一维的10x10x3。是否可以在不知道缓冲区大小的情况下恢复原始数组,就像图像一样?

python arrays base64 numpy

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

将一个IP列表解析为python中的argparse为字符串

我想执行一个python脚本,它可以处理多个IP地址.这些地址可以通过commad line给出.

我使用以下命令进行解析:

parser.add_argument('--IP',dest='Adresses',help='some Ips', 
default=['192.168.2.15','192.168.2.3'],type=list,nargs='+')
Run Code Online (Sandbox Code Playgroud)

但是,当我通过如下命令运行脚本时:

python script.py --IP 192.168.2.15,192.168.2.3
Run Code Online (Sandbox Code Playgroud)

它在每个字符之后拆分字符串,如果我使用空格而不是逗号,则会发生相同的行为,因此如果我将其打印出来,则会发生以下输出

[['1','9','2','.','1','6','8','.','2','.','1','5'] ,['1','9','2','.','1','6','8','.','2','.','3']]

我希望拥有的是:

[ '192.168.2.15', '192.168.2.3']

如默认参数中所述

所以有两件事我不能在这里工作:

  1. 我如何解析几个字符串到argparse但在一个参数下,以便它在列表中分离
  2. 如何通过字符停止分割

谢谢您的帮助

python string argparse

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

在 python 中出现一次时删除子字符串,但在连续两次时不删除

我知道如何删除或替换子字符串。但我只在子字符串不重复出现的情况下才想要它。我做了一个看起来非常难看的解决方法,我想知道是否有更好的解决方案。

假设以下字符串:

test = "Hello\n,I am here now.\n\nSo what's the problem?"  
Run Code Online (Sandbox Code Playgroud)

第一个"\n"应该删除,但第二个"\n\n"不应该。

为此,我将 替换为"\n\n"永远不会出现在正常会话字符串中的内容,例如:

x = test.replace('\n\n','42#*#')
x = x.replace('\n','')
x = x.replace('42#*#','\n\n')
Run Code Online (Sandbox Code Playgroud)

哪个有效,但我想知道是否有更好的解决方案来解决这个问题?

编辑:我尝试了在某个字符上拆分字符串的解决方案,前提是它没有直接跟在另一个特定字符之后

但是,当使用以下正则表达式时:

re.split('(?<!,)\n', test)
Run Code Online (Sandbox Code Playgroud)

我会得到以下结果:

['Hello', ',I am here now.', '', "So what's the problem?"]
Run Code Online (Sandbox Code Playgroud)

所以两者\n\n\n都被删除了,我怎样才能避免这种情况?

python regex string

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