MWE:
list1 = [2,5,46,23,9,78]
list1 = list(enumerate(list1))
Run Code Online (Sandbox Code Playgroud)
现在假设我想通过索引1对该列表进行排序,即按原始列表1排序,例如按升序排序.我怎么做?
我想要一些可以给我索引和值的东西.
list2 = sorted(list1[1], key=float)
Run Code Online (Sandbox Code Playgroud) 假设我有一个这样的数据框
df <- data.frame(x=c("This script outputs 10 visualizations.",
"This script outputs 1 visualization.",
"This script outputs 5 data files.",
"This script outputs 1 data file.",
"This script doesn't output any visualizations or data files",
"This script outputs 9 visualizations and 28 data files.",
"This script outputs 1 visualization and 1 data file."))
Run Code Online (Sandbox Code Playgroud)
看起来像这样
x
1 This script outputs 10 visualizations.
2 This script outputs 1 visualization.
3 This script outputs 5 data files.
4 This script outputs 1 data file. …Run Code Online (Sandbox Code Playgroud) 假设我有这个矩阵
m <- matrix(1:9, 3, 3)
Run Code Online (Sandbox Code Playgroud)
看起来像这样
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Run Code Online (Sandbox Code Playgroud)
我想将此矩阵放入具有特定列名称的数据框中。例如
col_names <- c("col1", "col2", "col3")
Run Code Online (Sandbox Code Playgroud)
创建数据框时是否有一种简单的方法来给出这些列名称?
# This is how I want to create the data frame
df <- data.frame(m)
Run Code Online (Sandbox Code Playgroud)
我希望我能说一些类似的话col.names=col_names。我尝试使用renamefrom 的函数dplyr,但无法使其在一行中工作
m %>% data.frame %>% {rename(., col_names=names(.))}
Run Code Online (Sandbox Code Playgroud)
问题是它不允许我将向量解包为我认为的参数。有没有更好的办法?
重要的是:我想在创作时给出这些名字。不在新行中。可能,它应该发生在管道中
我读到R在矩阵中使用列优先存储,这意味着附近列中的元素存储在连续块或类似的东西中。这让我想知道:是按行填充矩阵更快(byrow=TRUE在基本 R 函数中使用matrix())还是先按列填充矩阵(使用默认值byrow=FALSE)然后使用转置它更快t()?
我尝试对其进行基准测试。
> microbenchmark(matrix(1, n, n, byrow=TRUE))
Unit: seconds
expr min lq mean median uq max neval
matrix(1, n, n, byrow = TRUE) 1.047379 1.071353 1.105468 1.081795 1.112995 1.628675 100
Run Code Online (Sandbox Code Playgroud)
> microbenchmark(t(matrix(1, n, n)))
Unit: seconds
expr min lq mean median uq max neval
t(matrix(1, n, n)) 1.43931 1.536333 1.692572 1.61793 1.726244 3.070821 100
Run Code Online (Sandbox Code Playgroud)
似乎按行填充矩阵更快!我错过了什么吗?我原以为这R只会做一些重新标记,t()但实际上比逐行填充矩阵要慢!
对此有解释吗?我很困惑。
在 ThomasIsCoding 的回答和对自己进行了几次基准测试之后,它看起来取决于行数和列数。
我看过Matrix包和他们的幻灯片。我试图理解课堂上争论背后的直觉和含义是什么dgCMatrix。我明白那个
@i给出矩阵中非零条目的从零开始的行索引.@j给出矩阵中非零条目的从零开始的列索引.@x给出该位置处的非零元素(i,j)。但是我不明白指针的含义@p。文档说
\n\n\n数字(整数值)指针向量,每一列(或行)一个,指向列(或行)中元素的初始(从零开始)索引。
\n
这信息不是很丰富。在同一页面的“详细信息”部分中,他们解释了更多信息
\n\n\n\n\n如果缺少
\nior ,则必须是第一个元素为零的非递减整数向量。它提供行或列索引的压缩表示或 \xe2\x80\x9cpointer\xe2\x80\x9d 表示(以缺失者为准)。的扩展形式,其中, 用作(从 1 开始的)行或列索引。jpprep(seq_along(dp),dp)dp <- diff(p)
这对我来说绝对是不直观的。有人可以简单解释一下p代表什么吗?我已经创建了一个最小工作示例,但请随意创建一个新示例。
# Define non-zero values and their row/col indeces\ni_indeces <- c(1, 3, 4, 6, 8, 9)\nj_indeces <- c(2, 9, 6, 3, 9, 10)\nvalues …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Python 中实现Metropolis算法(Metropolis-Hastings 算法的更简单版本)。
这是我的实现:
def Metropolis_Gaussian(p, z0, sigma, n_samples=100, burn_in=0, m=1):
"""
Metropolis Algorithm using a Gaussian proposal distribution.
p: distribution that we want to sample from (can be unnormalized)
z0: Initial sample
sigma: standard deviation of the proposal normal distribution.
n_samples: number of final samples that we want to obtain.
burn_in: number of initial samples to discard.
m: this number is used to take every mth sample at the end
"""
# List of samples, check …Run Code Online (Sandbox Code Playgroud) 我想循环像:
for j in range(1,4) and for k in ['one', 'two', 'three']:
print(str(j) + ' is written ' + k)
Run Code Online (Sandbox Code Playgroud)
我试过and但它没有用.有人如何得到这种效果?
如果两个列表的长度不同,会发生什么?我怎么还能遍历它们呢?
我在一行中有一系列子图,所有子图共享相同的颜色条,我想使用plt.tight_layout().
然而,当天真地使用时,颜色条会把一切搞乱。幸运的是,我在 matplotlib 文档中找到了这一点,但它仅适用于一个子图。
我尝试使其适应多个子图,但分配颜色条的子图最终变得更小。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
plt.close('all')
arr = np.arange(100).reshape((10, 10))
fig, ax = plt.subplots(ncols=2, figsize=(8, 4))
im0 = ax[0].imshow(arr, interpolation="none")
im1 = ax[1].imshow(arr, interpolation='none')
divider = make_axes_locatable(plt.gca())
cax = divider.append_axes("right", "5%", pad="3%")
plt.colorbar(im0, cax=cax)
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
这就是结果的样子。
python ×4
r ×4
list ×2
matrix ×2
performance ×2
tidyr ×2
benchmarking ×1
dplyr ×1
enumerate ×1
loops ×1
matplotlib ×1
mcmc ×1
pointers ×1
random ×1
regex ×1