关于以下问题的后续问题:
如何在Python中使用MATLAB中的唯一(a,'rows')?
那里的答案解释了如何获得唯一的行.然而,matlab还返回创建的每一行的频率.用python做任何优雅的方式吗?
谢谢!
在使用 MATLAB 用户多年后,我现在正在迁移到 python。
我尝试找到一种简洁的方式来简单地用 python 重写以下 MATLAB 代码:
s = sum(Mtx);
newMtx = Mtx(:, s>0);
Run Code Online (Sandbox Code Playgroud)
其中 Mtx 是二维稀疏矩阵
我的Python解决方案是:
s = Mtx.sum(0)
newMtx = Mtx[:, np.where((s>0).flat)[0]] # taking the columns with nonzero indices
Run Code Online (Sandbox Code Playgroud)
其中 Mtx 是 2D CSC 稀疏矩阵
python代码不像matlab那样可读/优雅..知道如何更优雅地编写它吗?
谢谢!
是否有进程安全的持久(基于磁盘)Python FIFO 队列?
有人可以提供一个简单的示例,其中包含一个将字符串写入队列的脚本,以及另一个从队列中一次读取一个字符串的脚本吗?请注意,每个进程都可以从命令行启动多次。即多个作者和多个读者。
背景:我有几个脚本,每个脚本每隔一段时间就会产生一些输出。我想了解他们创建的输出,并使用另一个脚本来处理他们产生的信息。不幸的是,我无法使用 Python 的多处理或线程模块,因为脚本可以在同一文件系统上的不同计算机上运行。即每个脚本都是从命令行启动的。
我所需要的只是每个队列元素都是一个字符串,并且队列是进程安全的。
编辑:我找到了queuelib pqueque的模块,但它们不提供进程安全性。我正在考虑用atomicfile调用替换queuelib的文件处理。但我担心调试它的时间太长,因为我时间不够,而且在编写应该是进程安全的软件时总是有一些细节需要注意。
注1:我使用的是Python 2.7。
注意2:我知道这个问题,但是我的要求非常适中,我正在寻找一个简单的解决方案,而该问题提供的答案涉及复杂的库,没有关于如何使用队列的示例。
编辑(2019):对于登陆这里的任何人,我发现SQLite 数据库提供原子访问,它有一个 python API,并且它是无服务器的。因此,我相信用它来实现我的问题中的队列是可能的(并且很容易)。
我想在线程中调用一个函数。使用传统 API 调用它看起来像:
from threading import Thread
import numpy as np
a = np.random.rand(int(1e8),1)
Thread(target=np.savez_compressed, args=('/tmp/values.a', dict(a=a))).start()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个 pythonic 是使用更干净的 API 进行这个线程调用,而不定义一个特定于np.savez_compressed.
例如(伪代码)风格的东西:
@make_threaded
np.savez_compressed('/tmp/values.a', dict(a=a))
Run Code Online (Sandbox Code Playgroud)
不幸的是,装饰器只能应用于函数定义,所以上面的伪代码是不合法的。
编辑:我不是专门寻找装饰器 API。相反,一种使函数调用线程化的更简洁的方法
我有一个文本,我需要在python中解析.
这是一个字符串,我想将它拆分为一个行列表,但是,如果换行符(\n)在引号内,那么我们应该忽略它.
例如:
abcd efgh ijk\n1234 567"qqqq\n---" 890\n
Run Code Online (Sandbox Code Playgroud)
应该解析为以下行的列表:
abcd efgh ijk
1234 567"qqqq\n---" 890
Run Code Online (Sandbox Code Playgroud)
我已尝试过split('\n'),但我不知道如何忽略这些引号.
任何的想法?
谢谢!
我想将带有新索引的新记录添加到 pandas 数据框中,例如:
df = pandas.DataFrame(columns = ['COL1', 'COL2'])
Run Code Online (Sandbox Code Playgroud)
现在我有一个新记录,索引标签为“Test1”,值为 [20, 30] 我想做类似的事情(伪代码):
df.append(index='Test1', [20, 30])
Run Code Online (Sandbox Code Playgroud)
所以我的结果是
COL1 COL2
Test1 20 30
Run Code Online (Sandbox Code Playgroud)
我达到的最远的是:
df = df.append({'COL1':20, 'COL2':30}, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
但这个解决方案不包括新索引
谢谢!
我正在寻找一种优雅的方法来切割lpython中的列表,给出一个id列表l_ids.例如,而不是写作
new_list = [l[i] for i in l_ids]
Run Code Online (Sandbox Code Playgroud)
写一些像(伪代码):
new_list = l[*l_ids]
Run Code Online (Sandbox Code Playgroud)
切片列表有类似的方法吗?
我觉得有人已经问过这个问题,但我找不到任何参考资料.
编辑:可以假设所有列表项都是相同的类型
我想以OrderedDict相反的顺序迭代.
即颠倒顺序:
for k, v in my_ordered_dict.iteritems():
# < do stuff >
Run Code Online (Sandbox Code Playgroud)
到目前为止,通过反转列表,我得到了一个非懒惰的版本:
for k, v in list(my_ordered_dict.iteritems())[::-1]:
# < do stuff >
Run Code Online (Sandbox Code Playgroud)
任何想法如何使它更好?
我正在连接到一组机器,每台机器都位于一个单独的 tmux 窗格上。
我有一组想要同时发送的命令,这样每个命令都会在不同的tmux 窗格上执行。
有什么办法可以做到吗?
例如命令:
cmdA
cmdB
cmdC
cmdD
Run Code Online (Sandbox Code Playgroud)
同时发送到不同的 tmux 窗格
shell1> cmdA
______________________________________
shell2> cmdB
______________________________________
shell3> cmdC
______________________________________
shell4> cmdD
______________________________________
Run Code Online (Sandbox Code Playgroud) 我有许多样本的数据集.每个样本包含开始和结束时间,每个时间采用datestr(现在).
例如
sample.tstart = datestr(now)
%%Some job is running
sample.tend = datestr(now)
Run Code Online (Sandbox Code Playgroud)
如何减去时间来评估作业的已用时间?
谢谢!
Pandas iterrows改变列的类型.根据这个 github问题,这是一个预期的行为.
有什么想法将pythonic和优雅的方法重新塑造成原始类型吗?请注意,我有多种列类型.
最小的例子
df = pd.DataFrame([range(5), range(5)])
df.iloc[:,1] = df.iloc[:,1].astype('float')
for row in df.iterrows():
print row
Run Code Online (Sandbox Code Playgroud)
结果用
(0, 0 0.0
1 1.0
2 2.0
3 3.0
4 4.0
Name: 0, dtype: float64)
(1, 0 0.0
1 1.0
2 2.0
3 3.0
4 4.0
Name: 1, dtype: float64)
Run Code Online (Sandbox Code Playgroud)
请注意,df.dtypes返回列的类型,但是,我想不出使用它将行转换回该类型的优雅方式.