小编Wil*_*uks的帖子

通过Array中的元素乘以Python Sparse Matrix的行和列

我有一个numpy数组,如:

array = [0.2, 0.3, 0.4]
Run Code Online (Sandbox Code Playgroud)

(这个矢量实际上是300k密度的大小,我只用简单的例子说明)

以及使用Scipy创建的稀疏对称矩阵,如下所示:

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

(表示密集只是为了说明;在我的实际问题中它是一个(300k x 300k)稀疏矩阵)

是否可以将所有行乘以数组中的元素,然后对列进行相同的操作?

这将首先导致:

M = [[0 * 0.2, 1 * 0.2, 2 * 0.2]
     [1 * 0.3, 0 * 0.3, 1 * 0.3]
     [2 * 0.4, 1 * 0.4, 0 * 0.4]]
Run Code Online (Sandbox Code Playgroud)

(行与数组中的元素相乘)

M = [[0, 0.2, 0.4]
     [0.3, 0, 0.3]
     [0.8, 0.4, 0]]
Run Code Online (Sandbox Code Playgroud)

然后列成倍增加:

M = [[0 * 0.2, 0.2 * 0.3, 0.4 * 0.4]
     [0.3 * 0.2, …
Run Code Online (Sandbox Code Playgroud)

python operations sparse-matrix

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

Cython AttributeError:“模块”对象没有属性“声明”

编译 .pyx 文件工作正常,但当我输入以下内容时突然开始出现错误:

python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

我收到错误:

c:\Python27\cython\helloworld>python setup.py build_ext --inplace
running build_ext
cythoning hello.pyx to hello.c
Traceback (most recent call last):
  File "setup.py", line 8, in <module>
    ext_modules = [Extension("hello", ["hello.pyx"])]
  File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\site-packages\Cython\Distutils\build_ext.py", line 163,
in run
    _build_ext.build_ext.run(self)
  File "C:\Python27\lib\distutils\command\build_ext.py", line 340, in run
    self.build_extensions()
  File "C:\Python27\lib\site-packages\Cython\Distutils\build_ext.py", line 170,
in build_extensions
    ext.sources = self.cython_sources(ext.sources, ext)
  File "C:\Python27\lib\site-packages\Cython\Distutils\build_ext.py", …
Run Code Online (Sandbox Code Playgroud)

python cython attributeerror

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

错误:标量子查询生成多个元素

我们刚开始将查询从Legacy迁移到Standard SQL,因此我们现在正在学习如何处理嵌套数据和数组.

基本上我们想要做的是从ga_sessions表中检索以下数据:

visitor id, session id, array of skus
visitor 1, session 1, [sku_0, sku_1, (...), sku_n]
visitor 1, session 2, [skus]
Run Code Online (Sandbox Code Playgroud)

为此,我们运行了这个简单的查询:

  WITH
  customers_data AS(
  SELECT
    fullvisitorid fv,
    visitid v,
    ARRAY_AGG((
      SELECT
        prods.productsku
      FROM
        UNNEST(hits.product) prods)) sku
  FROM
    `dataset_id.ga_sessions_*`,
    UNNEST(hits) hits
  WHERE
    1 = 1
    AND _table_suffix BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY))
    --and (select count(productsku) from unnest(hits.product) where productsku is not null) = 1
  GROUP BY
    fv,
    v
  LIMIT …
Run Code Online (Sandbox Code Playgroud)

google-bigquery

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

Bigquery标准SQL中的"contains"

我希望从Legacy SQL迁移到Standard SQL

我在Legacy SQL中有以下代码

SELECT
  hits.page.pageTitle
FROM [mytable] 
WHERE hits.page.pageTitle contains '%' 
Run Code Online (Sandbox Code Playgroud)

我在标准SQL中尝试过这个:

SELECT
  hits.page.pageTitle
FROM `mytable` 
WHERE STRPOS(hits.page.pageTitle, "%") 
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

错误:无法访问类型为ARRAY>的值[4:21]的字段页面

sql google-bigquery

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

流式传输之前的BigQuery表截断不起作用

我们使用BigQuery Python API来运行一些分析.为此,我们创建了以下适配器:

def stream_data(self, table, data, schema, how=None):
    r = self.connector.tables().list(projectId=self._project_id,
                                     datasetId='lbanor').execute()
    table_exists = [row['tableReference']['tableId'] for row in
                    r['tables'] if
                    row['tableReference']['tableId'] == table]
    if table_exists:
        if how == 'WRITE_TRUNCATE':
            self.connector.tables().delete(projectId=self._project_id,
                                           datasetId='lbanor',
                                           tableId=table).execute()
            body = {
                'tableReference': {
                    'tableId': table,
                    'projectId': self._project_id,
                    'datasetId': 'lbanor'
                },
                'schema': schema
            }
            self.connector.tables().insert(projectId=(
                                           self._project_id),
                                           datasetId='lbanor',
                                           body=body).execute()
    else:
        body = {
            'tableReference': {
                'tableId': table,
                'projectId': self._project_id,
                'datasetId': 'lbanor'
            },
            'schema': schema
        }
        self.connector.tables().insert(projectId=(
                                       self._project_id),
                                       datasetId='lbanor',
                                       body=body).execute()

    body = {
        'rows': [
            {
                'json': data, …
Run Code Online (Sandbox Code Playgroud)

python google-bigquery

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

Pandas read_gbq 无法正常工作?

我正在尝试在 google BigQuery 上的数据集中合并两个表

使用以下代码:

def mergeTables(workingTable, table, DATASET_ID):
    query ="""
        SELECT
            full_name,
            age
        FROM {DATASET_ID}.{workingTable}
        UNION DISTINCT
        SELECT
            full_name,
            age
        FROM {DATASET_ID}.{table}
        LIMIT 100;
        """
    df = pd.read_gbq(query, "joe-python-analytics", 'standard')
    print(df)
Run Code Online (Sandbox Code Playgroud)

工作表和表是我希望与我的联合操作员合并的两个表。但是,当我运行该方法时,出现错误:

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/bigquery/v2/projects/j/queries/job_aalt=json returned "Encountered "" at line 6, column 15.
[Try using standard SQL (https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql)]">
Run Code Online (Sandbox Code Playgroud)

我已经启用了标准 sql 这似乎没有帮助?

python mysql google-bigquery

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

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

Python瓶颈argpartsort性能

有没有理由(考虑到我没有搞砸某事)为什么在对给定数组中的前n = 1000个元素进行排序时,bottleneck.argpartsort的性能最佳?

我创建了以下脚本:

d = numpy.random.rand(300000)
l = []
for i in range(5):
    to = time()
    ind = argpartsort(-d, pow(10,i))
    tf = time()
    l.append((pow(10,i), tf - to))
Run Code Online (Sandbox Code Playgroud)

结果导致:

 [(1, 0.008157968521118164),
 (10, 0.006367921829223633),
 (100, 0.006164073944091797),
 (1000, 0.002994060516357422),
 (10000, 0.004293203353881836)]
Run Code Online (Sandbox Code Playgroud)

绘制结果给出:

argpartsort表现

我认为较少的值argpartsort必须追踪它应该更快,但它不是我所观察到的.我在某个地方搞砸了还是预期的?

提前致谢!

python performance numpy

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

龙卷风不解释URL

我一直在尝试使用Tornado Framework创建一个Web服务.该系统应该处理如下URL:

IP:Port/?user=1822&catid=48&skus=AB1,FS35S,98KSU1

首先我创建了这段代码来阅读网址:

#!/usr/bin/env python

from datetime import date
import tornado.httpserver
import tornado.escape
import tornado.ioloop
import tornado.web

class WService(tornado.web.RequestHandler):
    def get(self, url):
        self.write("value of url: %s" %(url))

application = tornado.web.Application([
    (r"/([^/]+)", WService)])

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(9000)
    tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

并输入网址:

IP:Port/hello_world

导致:

value of url: hello_world

除了"?"之外,URL中使用的任何字符都有效.更改代码时,例如:

application = tornado.web.Application([
        (r"/?([^/]+)", WService)])
Run Code Online (Sandbox Code Playgroud)

并将网址发送到"?" mark(IP:Port/?hello_world)结果是:

404: Not Found

研究龙卷风来解决这个问题我发现了这个get_argument方法并尝试应用它,例如:

class WService2(tornado.web.RequestHandler):
    def get(self):
        user = self.get_argument('user', None)   
        respose = { 'user': user }   
        self.write(response) …
Run Code Online (Sandbox Code Playgroud)

python regex url tornado

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

BigQuery查询嵌套JSON

我有JSON数据,它以字符串形式保存在BigQuery中。

{
   "event":{
      "action":"prohibitedSoftwareCheckResult",
      "clientTime":"2017-07-16T12:55:40.828Z",
      "clientTimeZone":"3",
      "serverTime":"2017-07-16T12:55:39.000Z",
      "processList":{
         "1":"outlook.exe",
         "2":"notepad.exe"
      }
   },
   "user":{
      "id":123456,

   }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个结果集,其中每个进程将在不同的行中。就像是:

UserID        ProcessName
-------------------------
123456        outlook.exe
123456        notepad.exe
Run Code Online (Sandbox Code Playgroud)

我看到有一个查询重复数据的选项,但据我所知,该字段必须为RECORD类型。

是否可以在子查询中“即时”转换为RECORD类型?(我无法将源字段更改为RECORD)。

还是有其他方法返回期望的结果集?

sql json nested google-bigquery

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

解除嵌套 hits.product.customDimensions 错误

我在查询时遇到问题hits.product.customDimensions(相同的逻辑在 上正确工作hits.customDimensions)。我不明白为什么额外的嵌套会导致数组错误。任何帮助表示赞赏。谢谢你!

标准SQL

SELECT
  fullVisitorId,
  visitId,
  hits.hitNumber,
  product.productSKU,
  MAX(IF(c.index=1,c.value, null)) AS customDimesion1
FROM 17823880.ga_sessions_20180128,
UNNEST(hits) AS hits, 
UNNEST(hits.product) as product,
UNNEST(hits.product.customDimensions) as c
GROUP BY 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

错误

无法在 [11:23] 访问类型为 ARRAY> 的值上的字段 customDimensions

标准 SQL - 此查询运行时不会出现以下错误

SELECT
  fullVisitorId,
  visitId,
  hits.hitNumber,
  MAX(IF(c.index=1,c.value, null)) AS customDimesion1
FROM 17823880.ga_sessions_20180128,
UNNEST(hits) AS hits,
UNNEST(hits.customDimensions) as c
GROUP BY 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

sql google-analytics google-bigquery

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