小编nor*_*ok2的帖子

这是创建 numpy 数组的只读视图的正确方法吗?

我想创建对 NumPy 数组的只读引用。这是对(任何 NumPy 数组)进行b只读引用的正确方法吗?aa

def get_readonly_view(a):
    b = a.view()
    b.flags.writeable = False
    return b
Run Code Online (Sandbox Code Playgroud)

具体来说,我想确保上述内容不会“复制” a?的内容。(我尝试用它进行测试np.shares_memory,它确实返回True。但我不确定这是否是正确的测试。)

另外我想知道是否get_readonly_view已经在 NumPy 中实现了?


更新。 建议将数组转换为类属性以使其只读。我认为这不起作用:

import numpy as np

class Foo:

    def __init__(self):
        self._a = np.arange(15).reshape((3, 5))


    @property
    def a(self):
        return self._a


    def bar(self):
        print(self._a)
Run Code Online (Sandbox Code Playgroud)

但客户端可以更改以下内容_a

>> baz = Foo()
>> baz.bar()
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
>> …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

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

生成拉丁方块的有效方法(或在两个轴上唯一地在矩阵中随机置换数字 - 使用NumPy)

例如,如果有5个数字1,2,3,4,5

我想要一个随机的结果

[[ 2, 3, 1, 4, 5]
 [ 5, 1, 2, 3, 4]
 [ 3, 2, 4, 5, 1]
 [ 1, 4, 5, 2, 3]
 [ 4, 5, 3, 1, 2]]
Run Code Online (Sandbox Code Playgroud)

确保其行和列中的每个数字都是唯一的.

有没有一种有效的方法来做到这一点?

我尝试使用while循环为每次迭代生成一行,但似乎效率不高.

import numpy as np

numbers = list(range(1,6))
result = np.zeros((5,5), dtype='int32')
row_index = 0
while row_index < 5:
    np.random.shuffle(numbers)
    for column_index, number in enumerate(numbers):
       if number in result[:, column_index]:
           break
       else:
           result[row_index, :] = numbers
           row_index += 1
Run Code Online (Sandbox Code Playgroud)

python numpy scipy

7
推荐指数
2
解决办法
599
查看次数

Ubuntu 中的 Python 多处理内存泄漏,但在 Windows 中没有

我正在尝试从大约 100 个文件中拆分和重新排序数据。这些文件包含有关大约的信息。40 万用户,按时间顺序排列。目的是遍历 100 个文件并为每个用户创建一个单独的文件。

该方法是使用 python 多处理库来创建多个进程: - 一个工作进程处理池,用于加载数据、对其进行排序并将批次附加到队列中。每个批次包含一个用户的数据。- 一个从队列中取出元素并将批次添加到队列中的进程

现在,下面的代码适用于装有 Windows 10、Python 3.7 的笔记本电脑。然而,我试图在带有 ubuntu 16.04 和 python 3.5 的服务器上运行它。虽然在 Windows 上代码运行没有问题,但服务器内存不足。现在笔记本电脑有 8GB 的​​ RAM,而服务器有 256GB。我在这里缺少什么?

编辑:我已将代码替换为您应该能够运行的简化版本。代码现在创建进程,将 numpy 数组添加到队列中。另一个进程使数组出列。在数组排队期间,打印队列的大小。由于元素出列,队列大小保持较低。但是,内存使用量不断增加。

import numpy as np
import sys
import multiprocessing
import time


def queue_remover(q):

    while(1):
        if not q.empty():
            data = q.get()


def queue_adder(q, unused_number):

    for _ in range(5):
        q.put(np.zeros((1000,1000)))

    print('q size ', q.qsize())
    sys.stdout.flush()

    time.sleep(1)


if __name__ == "__main__":

    list_of_numbers = list(range(500))

    m = multiprocessing.Manager()
    queue = m.Queue(maxsize=40000)

    writer = …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multiprocessing python-3.x python-multiprocessing

7
推荐指数
0
解决办法
932
查看次数

如何在Python中模拟以文本模式打开的文件

我正在研究测试一些作用在文件上的代码的方法,但是我想编写一些测试,这些测试仅依赖于源文件中的特定字符串,而不是在文件系统中的某个位置具有特定的文件。

我知道可以file通过向字符串提供类似的流接口io.StringIO

问题在于操作不遵循相同的语义。例如,根据文件对象是来自还是来自包含非ASCII字符的字符串,组合file.seek()file.read()将产生不同的结果:open()io.StringIO

import io

#      'abgdezhjiklmnxoprstufqyw'
text = '??????????????o?????????'


with open('test.txt', 'w') as file_obj:
    file_obj.write(text)


with open('test.txt', 'r') as file_obj:
    file_obj.seek(8)
    print(file_obj.read(8))
# ????????


with io.StringIO(text) as file_obj:
    file_obj.seek(8)
    print(file_obj.read(8))
# ??????o?
Run Code Online (Sandbox Code Playgroud)

仅纯ASCII的字符串不会出现此问题:

import io

text = 'abgdezhjiklmnxoprstufqyw'


with open('test.txt', 'w') as file_obj:
    file_obj.write(text)


with open('test.txt', 'r') as file_obj:
    file_obj.seek(8)
    print(file_obj.read(8))
# iklmnxop


with io.StringIO(text) as file_obj:
    file_obj.seek(8)
    print(file_obj.read(8))
# iklmnxop
Run Code Online (Sandbox Code Playgroud)

显然,这是由于.seek()以下一个bytes语义为offset在打开的文件的情况下参数open() …

python python-3.x

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

使用 `np.linalg.solve()` 计算 `AB?¹`

我需要AB?¹在 Python/Numpy 中计算两个矩阵ABB当然是正方形)。

我知道这np.linalg.inv()可以让我计算B?¹,然后我可以乘以A。我也知道,B?¹A实际上是更好地与计算np.linalg.solve()

受此启发,我决定AB?¹np.linalg.solve(). 我得到了一个基于身份 的公式(AB)? = B?A?,它使用np.linalg.solve().transpose()

np.linalg.solve(a.transpose(), b.transpose()).transpose()
Run Code Online (Sandbox Code Playgroud)

这似乎在做这项工作:

import numpy as np


n, m = 4, 2
np.random.seed(0)
a = np.random.random((n, n))
b = np.random.random((m, n))

print(np.matmul(b, np.linalg.inv(a)))
# [[ 2.87169378 -0.04207382 -1.10553758 -0.83200471]
#  [-1.08733434  1.00110176  0.79683577  0.67487591]]
print(np.linalg.solve(a.transpose(), b.transpose()).transpose())
# [[ 2.87169378 -0.04207382 …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra matrix-inverse

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

从Python中的两个列表创建(嵌套)列表

您好我想从两个Arrays创建一个Array,但我不想用append()或extend()创建这个新的Array.

输入数组具有相同的行数和列数:

listone = [1,2,3]
listtwo = [4,5,6]
Run Code Online (Sandbox Code Playgroud)

我们期望的结果:

mergedlist = [[1,4],[2,5],[3,6]]
Run Code Online (Sandbox Code Playgroud)

它不能通过

mergedlist = listone.append(listtwo) or mergedlist = listone.extend(listtwo)
Run Code Online (Sandbox Code Playgroud)

我想得到

mergedlist = [[1,4],[2,5],[3,6]]
Run Code Online (Sandbox Code Playgroud)

如何获得所需的输出?

这是一个简单的例子来理解,真正的一个有14个文件,35行和61个数组.


对于一维,答案是可以的,但是当你有列表数组时

listone = [[1,2,3],[1,2,3],[1,2,3]]
listtwo = [4,5,6]
Run Code Online (Sandbox Code Playgroud)

我想得到

result = [[1,2,3,4],[1,2,3,5],[1,2,3,6]]
Run Code Online (Sandbox Code Playgroud)

当我使用merged = map(list,zip(listone,listtwo))

My result is [[[1, 2, 3], 4], [[1, 2, 3], 5], [[1, 2, 3], 6]] that is Bad
Run Code Online (Sandbox Code Playgroud)

python list nested-lists python-2.7

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

如何在Python中解析JSON-XML混合文件

我想使用Python解析具有以下语法(但具有无限数量的嵌套)的文件:

<XProtocol>
{
    <str1."fds"> "str2"
    <str3> 123.0
    <str4> { 1 2 3 4 5 6 6 "str" "str" 43 "str" 4543 }
    <weird1."str5">
    {
        <weird2."str6"> { "str" }
        <also."weird3"> 1
        <againweird> { 1 "fds" }
        { }
        <even> <more."weird4"> { } { } { } { "a" }
    }
}
Run Code Online (Sandbox Code Playgroud)

渴望的输出将是这样的:

'XProtocol':
{
    'str1."fds"': 'str2',
    'str3': 123.0,
    'str4': (1, 2, 3, 4, 5, 6, 6, 'str', 'str', 43, 'str', 4543),
    'weird1."str5"':
    {
        'weird2."str6"': ( 'str' ),
        'also."weird3"': 1,
        'againweird': ((1, …
Run Code Online (Sandbox Code Playgroud)

python regex parsing json pyparsing

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

How to unset `sharex` or `sharey` from two axes in Matplotlib

I have a series of subplots, and I want them to share x and y axis in all but 2 subplots (on a per-row basis).

I know that it is possible to create all subplots separately and then add the sharex/sharey functionality afterward.

However, this is a lot of code, given that I have to do this for most subplots.

A more efficient way would be to create all subplots with the desired sharex/sharey properties, …

python matplotlib subplot

6
推荐指数
2
解决办法
802
查看次数

在 Spinbox Tk Python 中启用鼠标滚轮

我想知道是否有一种聪明的方法可以在 Python 中的 Tk 小部件“Spinbox”中启用鼠标滚轮。

到目前为止,我发现的唯一明智的解决方案是派生一个具有所需功能的新 spinbox 类:

class Spinbox(tk.Spinbox):
    def __init__(self, *args, **kwargs):
        tk.Spinbox.__init__(self, *args, **kwargs)
        self.bind('<MouseWheel>', self.mouseWheel)
        self.bind('<Button-4>', self.mouseWheel)
        self.bind('<Button-5>', self.mouseWheel)

    def mouseWheel(self, event):
        if event.num == 5 or event.delta == -120:
            self.invoke('buttondown')
        elif event.num == 4 or event.delta == 120:
            self.invoke('buttonup')
Run Code Online (Sandbox Code Playgroud)

但考虑到这可能是预期的行为,我怀疑有更好的解决方案。

python user-interface tk-toolkit

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

`pandas.DataFrame.to_html()` 没有 `table border` 和 `tr style`

根据标题,是否有可能——如果有,如何——从 生成“干净”的 HTML 代码pandas.DataFrame.to_html()

我发现border=...justify=...参数控制着那里显示的内容,但显然无论你在那里放什么值,你似乎总是能得到它们。

这是一个最小的工作示例:

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.arange(3 * 4).reshape(3, 4))
df.to_html(border=0, justify='inherit')
Run Code Online (Sandbox Code Playgroud)

它产生:

<table border="0" class="dataframe">
  <thead>
    <tr style="text-align: inherit;">
    ...
Run Code Online (Sandbox Code Playgroud)

但是,我一直期待:

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.arange(3 * 4).reshape(3, 4))
df.to_html(classes=None, border=None, justify=None)
Run Code Online (Sandbox Code Playgroud)

会/应该产生:

<table class="dataframe">
  <thead>
    <tr>
    ...
Run Code Online (Sandbox Code Playgroud)

代替:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
    ...
Run Code Online (Sandbox Code Playgroud)

因为介绍borderstyle都是外观而不是结构标签,应该通过css.

那么,有没有什么办法可以摆脱 …

html python pandas

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