说完看了看man页面numpy
的eye
和identity
,我认为identity
是一个特例eye
,因为它具有较小的选项(例如eye
可以填写转移对角线,identity
不能),但可以振振有词地更快速地运行.但是,对于小型或大型阵列,情况并非如此:
>>> np.identity(3)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> np.eye(3)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> timeit.timeit("import numpy; numpy.identity(3)", number = 10000)
0.05699801445007324
>>> timeit.timeit("import numpy; numpy.eye(3)", number = 10000)
0.03787708282470703
>>> timeit.timeit("import numpy", number = 10000)
0.00960087776184082
>>> timeit.timeit("import numpy; numpy.identity(1000)", number = 10000)
11.379066944122314
>>> timeit.timeit("import numpy; numpy.eye(1000)", number = …
Run Code Online (Sandbox Code Playgroud) 请原谅这个奇怪的标题,我真的不能想到一个合适的措辞.
说我有一个像这样的数组:
arr = [[0 1 1 1 1 1 1 1 0],
[0 0 1 1 1 1 1 0 0],
[0 0 0 1 1 1 0 0 0],
[0 0 0 0 1 0 0 0 0],
[0 0 0 0 0 0 0 0 0]]
Run Code Online (Sandbox Code Playgroud)
我正在寻找"蚀刻" 1
触摸0
s的s,这将导致:
arr = [[0 0 1 1 1 1 1 0 0],
[0 0 0 1 1 1 0 0 0],
[0 0 0 0 1 0 …
Run Code Online (Sandbox Code Playgroud) 我想在python中绘制带有弯曲箭头的矢量场,可以在vfplot(见下文)或IDL中完成.
您可以在matplotlib中接近,但使用quiver()
限制直线向量(见左下图),streamplot()
但似乎不允许对箭头长度或箭头位置(见右下方)进行有意义的控制,即使在更改integration_direction
时density
,和maxlength
.
那么,有没有可以做到这一点的python库?或者有没有办法让matplotlib做到这一点?
我有一些python代码,在某些时候,采用轴的方式是一个合理稀疏的数组与nans in.每次我运行代码它引发一个RuntimeWarning
.
我知道是什么导致了警告,这是故意的,并且它不会影响输出.然而,每次运行程序时都会发出警告是非常恼人的 - 那么,是否有一种廉价且令人讨厌的方法来防止它们被打印到终端?
我正在寻找一个类似于np.interp
可以处理datetime
对象的功能.
例如:
import datetime, numpy as np
arr1 = np.array([datetime.datetime(2008,1,d) for d in range(1,10)])
arr2 = np.arange(1,10)
np.interp(datetime.datetime(2008,1,5,12),arr1,arr2)
Run Code Online (Sandbox Code Playgroud)
理想情况下会回归5.5
,但numpy
会加注TypeError: array cannot be safely cast to required type
.这周围有一种不错的pythonic方式吗?
我想旋转颜色条刻度标签,使它们垂直读取而不是水平读取.我已经尝试了许多变化,我能想到的与cbar.ax.set_xticklabels
和cbar.ax.ticklabel_format
等上rotation='vertical'
但还没有完全落地呢.
我在下面提供了一个MWE:
import numpy as np
import matplotlib.pyplot as plt
#example function
x,y = np.meshgrid(np.linspace(-10,10,200),np.linspace(-10,10,200))
z = x*y*np.exp(-(x+y)**2)
#array for contourf levels
clevs = np.linspace(z.min(),z.max(),50)
#array for colorbar tick labels
clevs1 =np.arange(-200,100,10)
cs1 = plt.contourf(x,y,z,clevs)
cbar = plt.colorbar(cs1, orientation="horizontal")
cbar.set_ticks(clevs1[::1])
plt.show()
Run Code Online (Sandbox Code Playgroud)
任何指针都将非常感激 - 我相信这一定非常简单......
说我有一个数组:
values = np.array([1.1,2.2,3.3,4.4,2.1,8.4])
Run Code Online (Sandbox Code Playgroud)
我想将这些值舍入到任意数组的成员,比如说:
rounds = np.array([1.,3.5,5.1,6.7,9.2])
Run Code Online (Sandbox Code Playgroud)
理想情况下返回一个圆形数字数组和一个残差数组:
rounded = np.array([1.,1.,3.5,5.1,1.,9.2])
residues = np.array([-0.1,-1.2,0.2,0.7,-1.1,0.6])
Run Code Online (Sandbox Code Playgroud)
有这样一个好的pythonic方式吗?
我知道语法tup = ("x",)
允许Python识别它tup
是一个元组而不是一个字符串,但是a = (2,3,)
和之间有什么区别b = (2,3)
吗?
这种转让产生:
>>> a == b
True
Run Code Online (Sandbox Code Playgroud) 我希望在 matplotlib 中绘制两个并排堆叠的直方图(类似于下面的示例图像)。我尝试过几种变体
bins = np.arange(10)
a1,b1,c1 =plt.hist([arr1,arr2,arr3],bins,stacked=True)
a2,b2,c2 =plt.hist([arr4,arr5,arr6],bins,stacked=True)
Run Code Online (Sandbox Code Playgroud)
但似乎无法避免让第二个图直接覆盖第一个图。关于如何解决这个问题有什么想法吗?
我最近将某些代码中的错误减少为以下行为的结果:
>>> arr = np.zeros(10)
>>> value = 0
>>> dictionary = {"key":[arr,value]}
>>> dictionary["key"][0]
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> dictionary["key"][1]
0
>>> dictionary["key"][0]+=1
>>> dictionary["key"][1]+=1
>>> dictionary["key"][0]
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> dictionary["key"][1]
1
>>> arr
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> value
0
Run Code Online (Sandbox Code Playgroud)
导致:
>>> dictionary["key"][0] is arr
True
>>> dictionary["key"][1] is value
False
Run Code Online (Sandbox Code Playgroud)
可能是一个愚蠢的问题,但是是什么导致了这个?
python ×10
numpy ×6
arrays ×4
matplotlib ×3
colorbar ×1
datetime ×1
dictionary ×1
histogram ×1
performance ×1
plot ×1
rounding ×1
tuples ×1
warnings ×1