我将如何设法将math.ceil一个数字分配给 10 的下一个最高幂?
# 0.04 -> 0.1
# 0.7 -> 1
# 1.1 -> 10
# 90 -> 100
# ...
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案是一个检查输入数字范围的字典,但它是硬编码的,我更喜欢单行解决方案。也许我在这里错过了一个简单的数学技巧或相应的 numpy 函数?
我有一个2016年的长度列表,但只有242包含数据,其余的设置为无.我的目标是在值之间插值以用IDW(反距离加权)的简单形式填充所有间隙.所以我的脚本的任务是:
假设我们只有一个较小的列表,只有14个项目(5个有效项目):
myList = [26, None, None, None, 31, None, None, 58, None, 42, None, None, None, 79]
resultList = [None] * len(myList)
for i in range(len(myList):
if not myList[i] is None:
resultList[i] = myList[i]
else:
distance = [i - j for j in range(len(myList)) if not myList[j] is None]
neighbors = min([n for n in dist if n>0]), max([n for n in dist if n<0])
# rest of the interpolation (not important for …Run Code Online (Sandbox Code Playgroud) 假设我有一个由成对的值组成的 numpy 数组。我想在不将它们分开的情况下找到这些对的所有组合。特别是,我希望为此找到numpy.meshgrid解决方案。
想象一个数组构造如下:
ab = np.array([[1,10], [2,20], [3,30], [4,40]])
Run Code Online (Sandbox Code Playgroud)
然后我想要的输出是
>>> out: ([1,10], [2,20])
([1,10], [3,30])
([1,10], [4,40])
([2,20], [3,30])
([2,20], [4,40])
([3,30], [4,40])
Run Code Online (Sandbox Code Playgroud)
输出可以是 anp.array或 a tuple(之后我可以相应地进行转换)。请注意我的结果中如何省略重复项,忽略我的夫妇的顺序(如果[[1,10], [2,20]]已经存在,我不希望[[2,20], [1,10]]在我的输出中)。对于真实情况,ab大小为 30,000,因此速度是另一个问题。
这就是我首先尝试 meshgrid 的原因。对于单个值的简单情况,这很容易完成(但仍然存在重复项):
a = np.array([1,2,3,4])
mesh = np.array(np.meshgrid(a,a)).T.reshape(-1,2)
>>> out: [[1 1]
[1 2]
[1 3]
[1 4]
[2 1]
[...]
[4 4]]
Run Code Online (Sandbox Code Playgroud)
但对于我的配对,我的尝试
mesh = np.array(np.meshgrid(ab,ab)).T
Run Code Online (Sandbox Code Playgroud)
给我
[[[ 1 1]
[ 1 10]
[ 1 …Run Code Online (Sandbox Code Playgroud) 给定这个嵌套列表:
foo = [["apple", "cherry"], ["banana"], ["pear", "raspberry", "pineapple"]]
Run Code Online (Sandbox Code Playgroud)
我想保留结构并用连续数字替换所有项目.我想要的输出是:
[[0, 1], [2], [3, 4, 5]]
Run Code Online (Sandbox Code Playgroud)
我希望有一个简单的单行,但我提出的最短的工作解决方案是:
foo_numbers = []
count = 0
for i, sublist in enumerate(foo):
foo_numbers.append([])
for item in sublist:
foo_numbers[i].append(count)
count += 1
Run Code Online (Sandbox Code Playgroud)
通常这些手动迭代器表明有更多的pythonic方法来实现同样的事情.如果要完成列表理解,我无法看到如何为两个循环组成一个"共享计数器",所以它不会从零开始sublist.
我不断收到新数据作为 numpy 矩阵,我需要将其附加到现有文件中。该文件的结构和数据类型是固定的,所以我需要 python 来帮我进行转换。
对于单个矩阵,这有效:
myArr = np.reshape(np.arange(15), (3,5))
myArr.tofile('bin_file.dat')
Run Code Online (Sandbox Code Playgroud)
但是假设我想继续向现有文件附加越来越多的数组,然后numpy.tofile将覆盖它在文件中找到的任何内容,而不是附加。
我发现我还可以继续这样做:
bfile = open('bin_file.dat', 'ab')
np.save(bfile, myArr)
bfile.close()
Run Code Online (Sandbox Code Playgroud)
它成功附加到二进制文件。但numpy.save另一方面,不存储原始二进制数据,但还保存一个标头(我假设),这使得外国软件无法读取该文件(我需要原始二进制文件float32)。
使用 读取文件的现有内容numpy.fromfile、追加数据并再次保存不是一种选择,因为文件会变得非常大,并且所有 I/O 将永远需要处理。
有没有类似append模式的东西numpy.tofile?我目前还缺少其他可能性吗?
我有几个要添加单个颜色条的子图。每个子图由 7 个散点组成。我找到了关于如何添加颜色条的建议,但它们主要与每个散点的值有关,而不是与行本身有关。
代表性示例代码:
import numpy as np
from matplotlib import pyplot as plt
x = range(50)
scales = np.linspace(0, 2, 7)
locs = range(4)
cmap = plt.get_cmap("Spectral")
for s_plot in range(4):
plt.subplot(2, 2, s_plot+1)
color = iter(cmap(np.linspace(0, 1, len(scales))))
for scale in scales:
c = next(color)
y = np.random.normal(loc=locs[s_plot], scale=scale, size=50)
plt.scatter(x, y, c=c, s=5)
plt.title("Mean = {:d}".format(locs[s_plot]))
plt.subplots_adjust(hspace=0.4)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想要的颜色条看起来像这样(假的,放在情节旁边):
所以颜色条没有描述我的散点的值,而是迭代的不同“行”(在这种情况下:不同的比例)。在有助于将点与比例匹配的示例中。
我尝试的是一个简单的
plt.colorbar()
Run Code Online (Sandbox Code Playgroud)
在完成每个子图后调用一次。但我也得到了
TypeError: You must first set_array for mappable
,因为它是我想为其创建颜色图的不同比例,我也尝试过
plt.colorbar(scales)
Run Code Online (Sandbox Code Playgroud)
返回:AttributeError: 'numpy.ndarray' object …
我的问题似乎很容易,但不知怎的,我没有遇到一个合适的解决方案.我想用R中的值(0)替换R中列表(!)中的所有负值.
对于矢量或矩阵,这很容易:
matrixx <- as.matrix(rnorm(20,0,0.5))
matrixx[matrixx<0] <- 0
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将其应用于列表(具有不同的长度,所有条目数字)时,它返回:
(list)对象无法强制输入'double'
我试过了unlist(x),但这似乎也不能完成这项工作.我错过了什么?
这是一个示例性数据集:
dummy_list <- list(0)
dummy_list[[1]] <- c(-0.5, 0, 0.5, 1.0, 1.5, 2.0)
dummy_list[[2]] <- c(-5, -2, 10)
Run Code Online (Sandbox Code Playgroud)
感谢帮助!