在处理相同的大数据时,我遇到了一些问题.但是现在,让我们假设我有一个填充零的NumPy数组
>>> x = np.zeros((3,3))
>>> x
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
Run Code Online (Sandbox Code Playgroud)
现在我想用特定值更改其中一些零.我已经给出了我想要改变的细胞的索引.
>>> y = np.array([[0,0],[1,1],[2,2]])
>>> y
array([[0, 0],
[1, 1],
[2, 2]])
Run Code Online (Sandbox Code Playgroud)
我有一个包含所需(现在随机)数字的数组,如下所示
>>> z = np.array(np.random.rand(3))
>>> z
array([ 0.04988558, 0.87512891, 0.4288157 ])
Run Code Online (Sandbox Code Playgroud)
所以现在我想我可以做到以下几点:
>>> x[y] = z
Run Code Online (Sandbox Code Playgroud)
但是它比这更充满了整个阵列
>>> x
array([[ 0.04988558, 0.87512891, 0.4288157 ],
[ 0.04988558, 0.87512891, 0.4288157 ],
[ 0.04988558, 0.87512891, 0.4288157 ]])
Run Code Online (Sandbox Code Playgroud)
但我希望得到
>>> x
array([[ 0.04988558, 0, 0 ],
[ 0, 0.87512891, 0 ], …Run Code Online (Sandbox Code Playgroud) TypeError: 'UndefinedType' object is not callable运行以下 Altair 代码时,我收到了。
import altair as alt
from vega_datasets import data
cars = data.cars()
alt.Chart(cars).mark_point().encode(
x=alt.X('Horsepower').axis(tickMinStep=50),
y=alt.Y('Miles_per_Gallon').title('Miles per Gallon'),
color='Origin',
shape='Origin'
)
Run Code Online (Sandbox Code Playgroud) 使用np.diag我能够构建一个二维数组,其中输入一维数组在对角线上返回.但如果我有nD数组作为输入,如何做同样的事情?
这有效
foo = np.random.randint(2, size=(36))
print foo
print np.diag(foo)
[1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 1 0]
[[1 0 0 ..., 0 0 0]
[0 1 0 ..., 0 0 0]
[0 0 1 ..., 0 0 0]
...,
[0 0 0 ..., 1 0 0]
[0 0 0 …Run Code Online (Sandbox Code Playgroud) 如何在numpy中执行以下操作?
n从满足1的所有行中选择第一行(比方说2)行.以下结果导致数组中没有分配新值:
In [177]:
a = np.array([[0,0,3],[4,5,6],[7,0,0],[10,11,12],[13,14,15]])
b = np.zeros_like(a)
a
Out[177]:
array([[ 0, 0, 3],
[ 4, 5, 6],
[ 7, 0, 0],
[10, 11, 12],
[13, 14, 15]])
In [178]:
# select all rows containg note more than 50% 0 values
percent = np.sum(a == 0, axis=-1) / float(check.shape[1])
percent = percent >= 0.5
slice = np.invert(percent).nonzero()[0]
In [183]:
# select first two rows satisfying 'slice'
a[slice][0:2]
Out[183]:
array([[ 4, 5, 6],
[10, 11, …Run Code Online (Sandbox Code Playgroud) 我将所有数据都放入了HDFStore(是的!),但是如何将它从中获取...
我在我的HDFStore中保存了6个DataFrames作为frame_table.这些表中的每一个都如下所示,但长度不同(日期是朱利安日期).
>>> a = store.select('var1')
>>> a.head()
var1
x_coor y_coor date
928 310 2006257 133
932 400 2006257 236
939 311 2006257 253
941 312 2006257 152
942 283 2006257 68
Run Code Online (Sandbox Code Playgroud)
然后我从我的所有表中选择日期为例如> 2006256的值.
>>> b = store.select_as_multiple(['var1','var2','var3','var4','var5','var6'], where=(pd.Term('date','>',date)), selector= 'var1')
>>> b.head()
var1 var2 var3 var4 var5 var6
x_coor y_coor date
928 310 2006257 133 14987 7045 18 240 171
2006273 136 0 7327 30 253 161
2006289 125 0 -239 83 217 168
2006305 95 14604 6786 13 …Run Code Online (Sandbox Code Playgroud) 在Matlab中非常简单,但我无法在Python中获得它.如何获得以下内容:
x=np.array([1,2,3])
y=np.array([4,5,6,7])
z=x.T*y
z=
[[4,5,6,7],
[8,10,12,14],
[12,15,18,21]]
Run Code Online (Sandbox Code Playgroud)
如在
x [4][5][6][7]
[1]
[2]
[3]
Run Code Online (Sandbox Code Playgroud) 我的问题是两个问题
首先,假设我有两个numpy数组,它们被部分屏蔽
array_old
[[-- -- -- --]
[10 11 -- --]
[12 14 -- --]
[-- -- 17 --]]
array_update
[[-- 5 -- --]
[-- -- 9 --]
[-- 15 8 13]
[-- -- 19 16]]
Run Code Online (Sandbox Code Playgroud)
如何创建一个新数组,其中所有非掩码值都被更新或修改,如:
array_new
[[-- 5 -- --]
[10 11 9 --]
[12 15 8 13]
[-- -- 19 16]]
Run Code Online (Sandbox Code Playgroud)
其次,如果可能的话,如何在3d numpy数组中进行上述操作?
更新:
对于第二部分,现在我使用for循环,使用@freidrichen方法如下:
array = np.ma.masked_equal([[[0, 0, 0, 0], [10, 11, 0, 0], [12, 14, 0, 0], [0, 0, 17, 0]],[[0, 5, 0, …Run Code Online (Sandbox Code Playgroud) 我屏蔽我的数组,其中值是nodata(-9999),计算轴上的平均值= 0然后取消屏蔽我的数据数组,但然后我的nodata值变为0,但现在如何区分"计算平均值0"和"nodata 0's".请参阅以下代码示例:
In [1]: import numpy.ma as ma
...: x = [[0.,1.,-9999.,3.,4.],[0.,2.,-9999,4.,5.]]
...: x
Out[1]: [[0.0, 1.0, -9999.0, 3.0, 4.0], [0.0, 2.0, -9999, 4.0, 5.0]]
In [2]: mx = ma.masked_values(x, -9999.)
...: mx
Out[2]:
masked_array(data =
[[0.0 1.0 -- 3.0 4.0]
[0.0 2.0 -- 4.0 5.0]],
mask =
[[False False True False False]
[False False True False False]],
fill_value = -9999.0)
In [3]: mean = mx.mean(axis=0)
...: mean
Out[3]:
masked_array(data = [0.0 1.5 -- 3.5 4.5],
mask = [False …Run Code Online (Sandbox Code Playgroud) 阅读 Parse日期,当YYYYMMDD和HH在Python中使用pandas 和 使用python pandas 在单独的列中解析CSV时,日期格式为Year,Day,Hour,Min,Sec
我仍然无法用年,月,日和小时的分隔列解析日期.我的数据看起来像这样(第0列是ID,第一个是年份,第二个是月份,第三个是日,第四个是小时,第五个是值)
50136 2011 1 1 21 9792
50136 2011 1 1 22 9794
50136 2011 1 1 23 9796
50136 2011 1 1 0 9798
50136 2011 1 1 1 9799
50136 2011 1 1 2 9802
Run Code Online (Sandbox Code Playgroud)
我试过以下:
df = pd.read_csv(file, parse_dates = {'date': [1, 2, 3, 4]}, , index_col='date')但是我得索引不是时间戳而是unicode(?)
In [17]: print df.head()
Out [17]:
0 5
date
2011 1 1 21 50136 9792
2011 1 1 22 50136 9794
2011 …Run Code Online (Sandbox Code Playgroud) 奇怪的问题,我可以连接两个数字,int(str(2)+str(3))但是如何将两个 numpy 数组连接起来?喜欢
x = np.array([[1,2,3],[4,5,6]])
y = np.array([[4,5,6],[1,2,3]])
z = np.xx(x,y)
print(z)
array([[14, 25, 36],
[41, 52, 63]])
Run Code Online (Sandbox Code Playgroud)