我正在尝试重写以下例程(a,b,c,d和e都是数组):
def generate_a(b, c, e):
a = np.zeros_like(b)
d = np.zeros_like(b)
for i in range(a.size):
a[i] = (b[i] / c[i]) + d[i-1]
d[i] = a[i] * e[i]
return a
Run Code Online (Sandbox Code Playgroud)
不使用'for'循环,因为例程需要运行数百万次.这是一个小技巧,因为d中任何给定单元格的值取决于为a中的单元格计算的结果,而该结果又取决于为d计算的最后一个值.关于如何在没有迭代的情况下完成此任务的任何想法?
我想创建每月间隔而不使用 np.arange 进行迭代。作为一个简单的示例,我想要一个包含 np.datetime64 对象的数组,表示 1990-2000 范围内的元旦。我想是这样的:
np.arange(np.datetime64("1990-01-01"), np.datetime64("2000-01-01"), np.timedelta64(1, 'M'), dtype='datetime64[D]')
Run Code Online (Sandbox Code Playgroud)
但这会引发错误
TypeError: Cannot cast NumPy timedelta64 scalar from metadata [M] to [D] according to the rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)
如果我将 dtype 切换为 datetime[M],我会得到月份的数组,但我当然想要日期。
我想屏蔽 Pandas DataFrame 中的值,其中索引与列名相同。例如:
import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(12).reshape((4, 3)),
index=["a", "b", "c", "d"],
columns=["a", "b", "c"])
a b c
a 0 1 2
b 3 4 5
c 6 7 8
d 9 10 11
Run Code Online (Sandbox Code Playgroud)
屏蔽后:
a b c
a NaN 1 2
b 3 NaN 5
c 6 7 NaN
d 9 10 11
Run Code Online (Sandbox Code Playgroud)
看起来很简单,但我不确定如何以 Pythonic 方式做到这一点,而不需要迭代。
我有兴趣在满足特定条件的一维NumPy数组中获取最小值的位置(在我的情况下,中等阈值).例如:
import numpy as np
limit = 3
a = np.array([1, 2, 4, 5, 2, 5, 3, 6, 7, 9, 10])
Run Code Online (Sandbox Code Playgroud)
我想有效地掩盖所有在a极限以下的数字,这样结果np.argmin将是6.是否有一种计算上廉价的方法来掩盖不符合条件的值然后应用np.argmin?
我想根据第三列中的条件,将DataFrame的一列中的值乘以另一列中的值.例如:
data = pd.DataFrame({'a': [1, 33, 56, 79, 2], 'b': [9, 12, 14, 5, 5], 'c': np.arange(5)})
data.loc[data.a > 10, ['a', 'b']] *= data.loc[data.a > 10, 'c']
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据条件将'a'和'b'的值乘以'c'中的相应(相同行)值.但是,上述代码只会导致NaN值在所需范围内.
我发现最接近的解决方法是这样做:
data.loc[data.a > 10, ['a', 'b']] = (data.loc[data.a > 10, ['a', 'b']].as_matrix().T * data.loc[data.a > 10, 'c']).T
Run Code Online (Sandbox Code Playgroud)
这是有效的,但似乎有一种更好的(更多的Pythonic)方式,我错过了.
我正在从 csv 读取表格,并且只想要列的子集。我用于子集的列表包含我正在阅读的表中可能不存在的字段名称。例如:
# contents of sample.csv:
#a,b,c
#1,2,3
#4,5,6
subset = ['a', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
我想使用 pandas.read_csv 和子集返回以下内容,但这会引发错误:
pd.read_csv(sample.csv, usecols=subset)
a c
1 3
4 6
ValueError: Usecols do not match columns, columns expected but not found: ['d']
Run Code Online (Sandbox Code Playgroud)
我想我可能可以使用 usecols 的可调用值,但我不确定如何实现。
我想将测试应用于pandas数据帧,并根据测试结果在相应的数据帧中创建标记.我到目前为止:
import numpy as np
import pandas as pd
matrix = pd.DataFrame({'a': [1, 11, 2, 3, 4], 'b': [5, 6, 22, 8, 9]})
flags = pd.DataFrame(np.zeros(matrix.shape), columns=matrix.columns)
flag_values = pd.Series({"a": 100, "b": 200})
flags[matrix > 10] = flag_values
Run Code Online (Sandbox Code Playgroud)
但这会引发错误
ValueError: Must specify axis=0 or 1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在哪里可以指定轴?有没有更好的方法来实现这一目标?
编辑:
我在这个例子中寻找"标志"的结果是
a b
0 0
100 0
0 200
0 0
0 0
Run Code Online (Sandbox Code Playgroud) 我正在开发一个工具,可以将栅格图层转换为数组,以便使用NumPy进行处理,理想情况下,我希望能够使用.gdb中打包的栅格而不将它们全部导出(特别是如果这需要使用ArcGIS或ArcPy) ).
这可以通过OpenFileGDB驱动程序实现吗?据我所知,这个驱动程序似乎将栅格图层视为与矢量图层相同,这使您可以访问有关图层的一些数据,但不会为您提供ReadAsArray功能.