我想创建对 NumPy 数组的只读引用。这是对(任何 NumPy 数组)进行b
只读引用的正确方法吗?a
a
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) 例如,如果有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) 我正在尝试从大约 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
我正在研究测试一些作用在文件上的代码的方法,但是我想编写一些测试,这些测试仅依赖于源文件中的特定字符串,而不是在文件系统中的某个位置具有特定的文件。
我知道可以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() …
我需要AB?¹
在 Python/Numpy 中计算两个矩阵A
和B
(B
当然是正方形)。
我知道这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) 您好我想从两个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解析具有以下语法(但具有无限数量的嵌套)的文件:
<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) 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 中的 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)
但考虑到这可能是预期的行为,我怀疑有更好的解决方案。
根据标题,是否有可能——如果有,如何——从 生成“干净”的 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)
因为介绍border
和style
都是外观而不是结构标签,应该通过css
.
那么,有没有什么办法可以摆脱 …
python ×10
numpy ×3
python-3.x ×3
html ×1
json ×1
list ×1
matplotlib ×1
nested-lists ×1
pandas ×1
parsing ×1
pyparsing ×1
python-2.7 ×1
regex ×1
scipy ×1
subplot ×1
tk-toolkit ×1