让我们有一个带有行和列标题的CSV表,例如:
, "Car", "Bike", "Boat", "Plane", "Shuttle"
"Red", 1, 7, 3, 0, 0
"Green", 5, 0, 0, 0, 0
"Blue", 1, 1, 4, 0, 1
Run Code Online (Sandbox Code Playgroud)
我想获得行和列标题,即:
col_headers = ["Car", "Bike", "Boat", "Plane", "Shuttle"]
row_headers = ["Red", "Green", "Blue"]
data = [[1, 7, 3, 0, 0],
[5, 0, 0, 0, 0],
[1, 1, 4, 0, 1]]
Run Code Online (Sandbox Code Playgroud)
当然我可以做点什么
import csv
with open("path/to/file.csv", "r") as f:
csvraw = list(csv.reader(f))
col_headers = csvraw[1][1:]
row_headers = [row[0] for row in csvraw[1:]]
data = [row[1:] for …Run Code Online (Sandbox Code Playgroud) 我想要numpy.array从NxM到NxMx3的映射a ,其中三个元素的向量是原始条目的函数:
lambda x: [f1(x), f2(x), f3(x)]
Run Code Online (Sandbox Code Playgroud)
但是,像numpy.vectorize不允许更改尺寸的事情.当然,我可以创建一个零数组并创建一个循环(这就是我现在正在做的事情),但它既没有Pythonic也没有效率(就像Python中的每个循环一样).
有没有更好的方法在numpy.array上执行元素操作,为每个条目生成一个向量?
如何优化Mathematica生成的eps或pdf文件的大小?
通常文件大小应该比它大50-100倍(下面的例子).对于某些应用程序(例如将图形放在出版物中,或者甚至更多 - 将其放在大型海报上)我需要在矢量图形中使用轴,因此对于我来说使用光栅图形并不是最佳选择.
每个实用的解决方案(无论是在Mathematica中设置正确的选项,还是在其他应用程序中进行进一步的转换)都将受到赞赏.
例如,下面的代码生成一个eps数字:
plot = ListDensityPlot[
Table[Random[], {100}, {100}],
InterpolationOrder -> 0]
Export["testplot.eps", plot]
Export["testplot.pdf", plot]
Run Code Online (Sandbox Code Playgroud)
生成一个大小为3.3MB且pdf大小为5MB的eps文件(如果它有所不同,则在Mac OS X 10.6上的Mathematica 7上).
为了进行比较,具有相同轴的3x3图具有8kB(pdf)至20kB(eps).bmp中100x100点为30kB(png略低).
对于其他类型的情节,问题是相同的,重点是ListPlot3D.
我尝试绘制厚Bezier线(用于自定义Sankey图).我使用SVG路径,以贝塞尔曲线的形式C x1 y1, x2 y2, x y.我使用stroke而不是fill,因此它们具有恒定的宽度(并且可以表示流).
如果线条很薄或垂直差异相对较小,它的效果非常好.然而,如果它们非常厚,我会得到一些讨厌的文物(看起来像角) - 请参见下图中的右下曲线:
资料来源:http://jsfiddle.net/stared/83jr5fub/
有没有办法避免伪影,即:
x1或右侧没有任何东西x,stroke-width?我创建了一个连接到其他库(livelossplot)的包.它有很多可选的依赖项(深度学习框架),我不想强迫人们安装它们.
现在我使用条件导入,本着以下精神:
try:
from .keras_plot import PlotLossesKeras
except ImportError:
# import keras plot only if there is keras
pass
Run Code Online (Sandbox Code Playgroud)
但是,这意味着它会导入大型库,即使不打算使用它们也是如此.问题是:只有在创建特定对象时才能导入库?
对于Python函数,它很简单:
def function_using_keras():
import keras
...
Run Code Online (Sandbox Code Playgroud)
从其他类继承的类有什么好的做法?
在定义对象之前,似乎需要导入父类:
from keras.callbacks import Callback
class PlotLossesKeras(Callback):
...
Run Code Online (Sandbox Code Playgroud) 我想将一些行从Pandas DataFrame导出到JSON.但是,导出列时出现错误:
TypeError: False is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
要么
TypeError: 0 is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我抬头查看了我的数据,问题出现了numpy.int64并且numpy.bool_(numpy.float64工作正常).
例如,出现以下问题:
import pandas as pd
import simplejson as json
df = pd.DataFrame([[False,0],[True,1]], columns=['a','b'])
json.dumps(df.ix[0].to_dict())
Run Code Online (Sandbox Code Playgroud)
(同样的事情发生dict(df.ix[0])).
是否有一个简单的解决方法将Pandas系列导出为JSON?
或者至少是一个将任何numpy类型强制转换为与JSON兼容的最接近类型的函数?