任何語言都是一門藝術,下面分析一下Python之禪:
在命令行輸入:
import this
結果如下:
Beautifulisbetterthanugly.
Explicitisbetterthanimplicit.
Simpleisbetterthancomplex.
.
Flatisbetterthannested.
Sparseisbetterthandense.
Readabilitycounts.
Specialcasesaren'tspecialenoughtobreaktherules.
.
Errorsshouldneverpasssilently.
Unlessexplicitlysilenced.
Inthefaceofambiguity,refusethetemptationtoguess.
Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.
'reDutch.
Nowisbetterthannever.
*right*now.
,it'sabadidea.
,itmaybeagoodidea.
--let'sdomoreofthose!
中英文對照解釋如下:
Beautifulisbetterthanugly.
#優美勝於醜陋(Python以編寫優美的代碼為目標)
Explicitisbetterthanimplicit.
#明了勝於晦澀(優美的代碼應當是明了的,命名規范,風格相似)
Simpleisbetterthancomplex.
#簡潔勝於復雜(優美的代碼應當是簡潔的,不要有復雜的內部實現)
.
#復雜勝於凌亂(如果復雜不可避免,那代碼間也不能有難懂的關系,要保持介面簡潔)
Flatisbetterthannested.
#扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
Sparseisbetterthandense.
#間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
Readabilitycounts.
#可讀性很重要(優美的代碼是可讀的)
Specialcasesaren'tspecialenoughtobreaktherules.
.
#即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
Errorsshouldneverpasssilently.
Unlessexplicitlysilenced.
#不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫except:pass風格的代碼)
Inthefaceofambiguity,refusethetemptationtoguess.
#當存在多種可能,不要嘗試去猜測
Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.
#而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
'reDutch.
#雖然這並不容易,因為你不是Python之父(這里的Dutch是指Guido)
Nowisbetterthannever.
*right*now.
#做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
,it'sabadidea.
,itmaybeagoodidea.
#如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標准)
--let'sdomoreofthose!
#命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)
Ⅱ python pyqt怎麼畫圓
這個例子我做了好幾天:
1)官網C++的源碼,改寫成PyQt5版本的代碼,好多細節不會轉化
2)網上的PyQt的例子根本運行不了
填了無數個坑,結合二者,終於能完成了一個關於繪圖的東西。這個過程也掌握了很多新的知識點
【知識點】
1、關於多個點的使用
poitns = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)]
請看:
import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class StockDialog(QWidget): def __init__(self, parent=None):
super(StockDialog, self).__init__(parent)
self.setWindowTitle("利用QPainter繪制各種圖形")
mainSplitter = QSplitter(Qt.Horizontal)
mainSplitter.setOpaqueResize(True)
frame = QFrame(mainSplitter)
mainLayout = QGridLayout(frame) #mainLayout.setMargin(10)
mainLayout.setSpacing(6)
label1=QLabel("形狀:")
label2=QLabel("畫筆線寬:")
label3=QLabel("畫筆顏色:")
label4=QLabel("畫筆風格:")
label5=QLabel("畫筆頂端:")
label6=QLabel("畫筆連接點:")
label7=QLabel("畫刷風格:")
label8=QLabel("畫刷顏色:")
self.shapeComboBox = QComboBox()
self.shapeComboBox.addItem("Line", "Line")
self.shapeComboBox.addItem("Rectangle", "Rectangle")
self.shapeComboBox.addItem('Rounded Rectangle','Rounded Rectangle')
self.shapeComboBox.addItem('Ellipse','Ellipse')
self.shapeComboBox.addItem('Pie','Pie')
self.shapeComboBox.addItem('Chord','Chord')
self.shapeComboBox.addItem('Path','Path')
self.shapeComboBox.addItem('Polygon','Polygon')
self.shapeComboBox.addItem('Polyline','Polyline')
self.shapeComboBox.addItem('Arc','Arc')
self.shapeComboBox.addItem('Points','Points')
self.shapeComboBox.addItem('Text','Text')
self.shapeComboBox.addItem('Pixmap','Pixmap')
self.widthSpinBox = QSpinBox()
self.widthSpinBox.setRange(0,20)
self.penColorFrame = QFrame()
self.penColorFrame.setAutoFillBackground(True)
self.penColorFrame.setPalette(QPalette(Qt.blue))
self.penColorPushButton = QPushButton("更改")
self.penStyleComboBox = QComboBox()
self.penStyleComboBox.addItem("Solid",Qt.SolidLine)
self.penStyleComboBox.addItem('Dash', Qt.DashLine)
self.penStyleComboBox.addItem('Dot', Qt.DotLine)
self.penStyleComboBox.addItem('Dash Dot', Qt.DashDotLine)
self.penStyleComboBox.addItem('Dash Dot Dot', Qt.DashDotDotLine)
self.penStyleComboBox.addItem('None', Qt.NoPen)
self.penCapComboBox = QComboBox()
self.penCapComboBox.addItem("Flat",Qt.FlatCap)
self.penCapComboBox.addItem('Square', Qt.SquareCap)
self.penCapComboBox.addItem('Round', Qt.RoundCap)
self.penJoinComboBox = QComboBox()
self.penJoinComboBox.addItem("Miter",Qt.MiterJoin)
self.penJoinComboBox.addItem('Bebel', Qt.BevelJoin)
self.penJoinComboBox.addItem('Round', Qt.RoundJoin)
self.brushStyleComboBox = QComboBox()
self.brushStyleComboBox.addItem("Linear Gradient",Qt.LinearGradientPattern)
self.brushStyleComboBox.addItem('Radial Gradient', Qt.RadialGradientPattern)
self.brushStyleComboBox.addItem('Conical Gradient', Qt.ConicalGradientPattern)
self.brushStyleComboBox.addItem('Texture', Qt.TexturePattern)
self.brushStyleComboBox.addItem('Solid', Qt.SolidPattern)
self.brushStyleComboBox.addItem('Horizontal', Qt.HorPattern)
self.brushStyleComboBox.addItem('Vertical', Qt.VerPattern)
self.brushStyleComboBox.addItem('Cross', Qt.CrossPattern)
self.brushStyleComboBox.addItem('Backward Diagonal', Qt.BDiagPattern)
self.brushStyleComboBox.addItem('Forward Diagonal', Qt.FDiagPattern)
self.brushStyleComboBox.addItem('Diagonal Cross', Qt.DiagCrossPattern)
self.brushStyleComboBox.addItem('Dense 1', Qt.Dense1Pattern)
self.brushStyleComboBox.addItem('Dense 2', Qt.Dense2Pattern)
self.brushStyleComboBox.addItem('Dense 3', Qt.Dense3Pattern)
self.brushStyleComboBox.addItem('Dense 4', Qt.Dense4Pattern)
self.brushStyleComboBox.addItem('Dense 5', Qt.Dense5Pattern)
self.brushStyleComboBox.addItem('Dense 6', Qt.Dense6Pattern)
self.brushStyleComboBox.addItem('Dense 7', Qt.Dense7Pattern)
self.brushStyleComboBox.addItem('None', Qt.NoBrush)
self.brushColorFrame = QFrame()
self.brushColorFrame.setAutoFillBackground(True)
self.brushColorFrame.setPalette(QPalette(Qt.green))
self.brushColorPushButton = QPushButton("更改")
labelCol=0
contentCol=1
#建立布局
mainLayout.addWidget(label1,1,labelCol)
mainLayout.addWidget(self.shapeComboBox,1,contentCol)
mainLayout.addWidget(label2,2,labelCol)
mainLayout.addWidget(self.widthSpinBox,2,contentCol)
mainLayout.addWidget(label3,4,labelCol)
mainLayout.addWidget(self.penColorFrame,4,contentCol)
mainLayout.addWidget(self.penColorPushButton,4,3)
mainLayout.addWidget(label4,6,labelCol)
mainLayout.addWidget(self.penStyleComboBox,6,contentCol)
mainLayout.addWidget(label5,8,labelCol)
mainLayout.addWidget(self.penCapComboBox,8,contentCol)
mainLayout.addWidget(label6,10,labelCol)
mainLayout.addWidget(self.penJoinComboBox,10,contentCol)
mainLayout.addWidget(label7,12,labelCol)
mainLayout.addWidget(self.brushStyleComboBox,12,contentCol)
mainLayout.addWidget(label8,14,labelCol)
mainLayout.addWidget(self.brushColorFrame,14,contentCol)
mainLayout.addWidget(self.brushColorPushButton,14,3)
mainSplitter1 = QSplitter(Qt.Horizontal)
mainSplitter1.setOpaqueResize(True)
stack1 = QStackedWidget()
stack1.setFrameStyle(QFrame.Panel|QFrame.Raised)
self.area = PaintArea()
stack1.addWidget(self.area)
frame1 = QFrame(mainSplitter1)
mainLayout1 = QVBoxLayout(frame1) #mainLayout1.setMargin(10)
mainLayout1.setSpacing(6)
mainLayout1.addWidget(stack1)
layout = QGridLayout(self)
layout.addWidget(mainSplitter1,0,0)
layout.addWidget(mainSplitter,0,1)
self.setLayout(layout)
#信號和槽函數 self.shapeComboBox.activated.connect(self.slotShape)
self.widthSpinBox.valueChanged.connect(self.slotPenWidth)
self.penColorPushButton.clicked.connect(self.slotPenColor)
self.penStyleComboBox.activated.connect(self.slotPenStyle)
self.penCapComboBox.activated.connect(self.slotPenCap)
self.penJoinComboBox.activated.connect(self.slotPenJoin)
self.brushStyleComboBox.activated.connect(self.slotBrush)
self.brushColorPushButton.clicked.connect(self.slotBrushColor)
self.slotShape(self.shapeComboBox.currentIndex())
self.slotPenWidth(self.widthSpinBox.value())
self.slotBrush(self.brushStyleComboBox.currentIndex())
def slotShape(self,value):
shape = self.area.Shape[value]
self.area.setShape(shape)
def slotPenWidth(self,value):
color = self.penColorFrame.palette().color(QPalette.Window)
style = Qt.PenStyle(self.penStyleComboBox.itemData(self.penStyleComboBox.currentIndex(),Qt.UserRole))
cap = Qt.PenCapStyle(self.penCapComboBox.itemData(self.penCapComboBox.currentIndex(),Qt.UserRole))
join = Qt.PenJoinStyle(self.penJoinComboBox.itemData(self.penJoinComboBox.currentIndex(),Qt.UserRole))
self.area.setPen(QPen(color,value,style,cap,join))
def slotPenStyle(self,value):
self.slotPenWidth(value)
def slotPenCap(self,value):
self.slotPenWidth(value)
def slotPenJoin(self,value):
self.slotPenWidth(value)
def slotPenColor(self):
color = QColorDialog.getColor(Qt.blue)
self.penColorFrame.setPalette(QPalette(color))
self.area.setPen(QPen(color))
def slotBrushColor(self):
color = QColorDialog.getColor(Qt.blue)
self.brushColorFrame.setPalette(QPalette(color))
self.slotBrush(self.brushStyleComboBox.currentIndex())
def slotBrush(self,value):
color = self.brushColorFrame.palette().color(QPalette.Window)
style = Qt.BrushStyle(self.brushStyleComboBox.itemData(value,Qt.UserRole))
if(style == Qt.Lin
Ⅲ python中的plt.pcolormesh 的參數是啥意思
導入matplotlib.pyplot, numpy 包 import numpy as np import matplotlib.pyplot as plt # 添加主題樣式 plt.style.use('mystyle') # 設置圖的大小,添加子圖 fig = plt.figure(figsize=(5,5)) ax = fig.add_subplot(111) #繪制sin, cos x = n.
Ⅳ Python 有哪些優雅的代碼實現
列表切割
list[start:end:step]
如果從列表開頭開始切割,那麼忽略 start 位的 0,例如list[:4]
如果一直切到列表尾部,則忽略 end 位的 0,例如list[3:]
切割列表時,即便 start 或者 end 索引跨界也不會有問題
列表切片不會改變原列表。索引都留空時,會生成一份原列表的拷貝
b= a[:]
assertb== aandbisnota# true
列表推導式
使用列表推導式來取代map和filter
a= [1,2,3,4,5,6,7,8,9,10]
# use map
squares= map(lambdax: x ** 2,a)
# use list comprehension
squares= [x ** 2forxina]
# 一個很大的好處是,列表推導式可以對值進行判斷,比如
squares= [x ** 2forxinaifx% 2== 0]
# 而如果這種情況要用 map 或者 filter 方法實現的話,則要多寫一些函數
不要使用含有兩個以上表達式的列表推導式
# 有一個嵌套的列表,現在要把它裡面的所有元素扁平化輸出
list= [[
[1,2,3],
[4,5,6]
]]
# 使用列表推導式
flat_list= [xforlist0 inlist forlist1 inlist0 forxinlist1]
# [1, 2, 3, 4, 5, 6]
# 可讀性太差,易出錯。這種時候更建議使用普通的循環
flat_list= []
forlist0 inlist:
forlist1 inlist0:
flat_list.extend(list1)
數據多時,列表推導式可能會消耗大量內存,此時建議使用生成器表達式
# 在列表推導式的推導過程中,對於輸入序列的每個值來說,都可能要創建僅含一項元素的全新列表。因此數據量大時很耗性能。
# 使用生成器表達式
list= (x ** 2forxinrange(0,1000000000))
# 生成器表達式返回的迭代器,只有在每次調用時才生成值,從而避免了內存佔用
Ⅳ python tensorflow 怎麼添加auc
tensorflow添加自定義的auc計算operator
tensorflow可以很方便的添加用戶自定義的operator(如果不添加也可以採用sklearn的auc計算函數或者自己寫一個 但是會在python執行,這里希望在graph中也就是c++端執行這個計算)
這里根據工作需要添加一個計算auc的operator,只給出最簡單實現,後續高級功能還是參考官方wiki
注意tensorflow現在和最初的官方wiki有變化,原wiki貌似是需要重新bazel編譯整個tensorflow,然後使用比如tf.user_op.auc這樣。
目前wiki給出的方式>=0.6.0版本,採用plug-in的方式,更加靈活可以直接用g++編譯一個so載入,解耦合,省去了編譯tensorflow過程,即插即用。
首先auc的operator計算的文件
tensorflow/core/user_ops/auc.cc
/* Copyright 2015 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================================*/
// An auc Op.
#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/op_kernel.h"
using namespace tensorflow;
using std::vector;
//@TODO add weight as optional input
REGISTER_OP("Auc")
.Input("predicts: T1")
.Input("labels: T2")
.Output("z: float")
.Attr("T1: {float, double}")
.Attr("T2: {float, double}")
//.Attr("T1: {float, double}")
//.Attr("T2: {int32, int64}")
.SetIsCommutative()
.Doc(R"doc(
Given preidicts and labels output it's auc
)doc");
class AucOp : public OpKernel {
public:
explicit AucOp(OpKernelConstruction* context) : OpKernel(context) {}
template<typename ValueVec>
void index_sort(const ValueVec& valueVec, vector<int>& indexVec)
{
indexVec.resize(valueVec.size());
for (size_t i = 0; i < indexVec.size(); i++)
{
indexVec[i] = i;
}
std::sort(indexVec.begin(), indexVec.end(),
[&valueVec](const int l, const int r) { return valueVec(l) > valueVec(r); });
}
void Compute(OpKernelContext* context) override {
// Grab the input tensor
const Tensor& predicts_tensor = context->input(0);
const Tensor& labels_tensor = context->input(1);
auto predicts = predicts_tensor.flat<float>(); //輸入能接受float double那麼這里如何都處理?
auto labels = labels_tensor.flat<float>();
vector<int> indexes;
index_sort(predicts, indexes);
typedef float Float;
Float oldFalsePos = 0;
Float oldTruePos = 0;
Float falsePos = 0;
Float truePos = 0;
Float oldOut = std::numeric_limits<Float>::infinity();
Float result = 0;
for (size_t i = 0; i < indexes.size(); i++)
{
int index = indexes[i];
Float label = labels(index);
Float prediction = predicts(index);
Float weight = 1.0;
//Pval3(label, output, weight);
if (prediction != oldOut) //存在相同值得情況是特殊處理的
{
result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos);
oldOut = prediction;
oldFalsePos = falsePos;
oldTruePos = truePos;
}
if (label > 0)
truePos += weight;
else
falsePos += weight;
}
result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos);
Float AUC = result / (truePos * falsePos);
// Create an output tensor
Tensor* output_tensor = NULL;
TensorShape output_shape;
OP_REQUIRES_OK(context, context->allocate_output(0, output_shape, &output_tensor));
output_tensor->scalar<float>()() = AUC;
}
};
REGISTER_KERNEL_BUILDER(Name("Auc").Device(DEVICE_CPU), AucOp);
編譯:
$cat gen-so.sh
TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
i=$1
o=${i/.cc/.so}
g++ -std=c++11 -shared $i -o $o -I $TF_INC -l tensorflow_framework -L $TF_LIB -fPIC -Wl,-rpath $TF_LIB
$sh gen-so.sh auc.cc
會生成auc.so
使用的時候
auc_mole = tf.load_op_library('auc.so')
#auc = tf.user_ops.auc #0.6.0之前的tensorflow 自定義op方式
auc = auc_mole.auc
evaluate_op = auc(py_x, Y) #py_x is predicts, Y is labels
Ⅵ Python怎麼生成三維數
importnumpyasnp
a=np.array([1,2,3],dtype=int)#創建1*3維數組array([1,2,3])
type(a)#numpy.ndarray類型
a.shape#維數信息(3L,)
a.dtype.name#'int32'
a.size#元素個數:3
a.itemsize#每個元素所佔用的位元組數目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int)#創建2*3維數組array([[1,2,3],[4,5,6]])
b.shape#維數信息(2L,3L)
b.size#元素個數:6
b.itemsize#每個元素所佔用的位元組數目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16')#創建2*3維數組array([[1,2,3],[4,5,6]],dtype=int16)
c.shape#維數信息(2L,3L)
c.size#元素個數:6
c.itemsize#每個元素所佔用的位元組數目:2
c.ndim#維數
d=np.array([[1,2,3],[4,5,6]],dtype=complex)#復數二維數組
d.itemsize#每個元素所佔用的位元組數目:16
d.dtype.name#元素類型:'complex128'
importnumpyasnp
a=np.array([1,2,3],dtype=int)#創建1*3維數組array([1,2,3])
type(a)#numpy.ndarray類型
a.shape#維數信息(3L,)
a.dtype.name#'int32'
a.size#元素個數:3
a.itemsize#每個元素所佔用的位元組數目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int)#創建2*3維數組array([[1,2,3],[4,5,6]])
b.shape#維數信息(2L,3L)
b.size#元素個數:6
b.itemsize#每個元素所佔用的位元組數目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16')#創建2*3維數組array([[1,2,3],[4,5,6]],dtype=int16)
c.shape#維數信息(2L,3L)
c.size#元素個數:6
c.itemsize#每個元素所佔用的位元組數目:2
c.ndim#維數
d=np.array([[1,2,3],[4,5,6]],dtype=complex)#復數二維數組
d.itemsize#每個元素所佔用的位元組數目:16
d.dtype.name#元素類型:'complex128'
a1=np.zeros((3,4))#創建3*4全零二維數組
輸出:
array([[0.,0.,0.,0.],
[0.,0.,0.,0.],
[0.,0.,0.,0.]])
a1.dtype.name#元素類型:'float64'
a1.size#元素個數:12
a1.itemsize#每個元素所佔用的位元組個數:8
a2=np.ones((2,3,4),dtype=np.int16)#創建2*3*4全1三維數組
a2=np.ones((2,3,4),dtype='int16')#創建2*3*4全1三維數組
輸出:
array([[[1,1,1,1],
[1,1,1,1],
[1,1,1,1]],
[[1,1,1,1],
[1,1,1,1],
[1,1,1,1]]],dtype=int16)
a3=np.empty((2,3))#創建2*3的未初始化二維數組
輸出:(mayvary)
array([[1.,2.,3.],
[4.,5.,6.]])
a4=np.arange(10,30,5)#初始值10,結束值:30(不包含),步長:5
輸出:array([10,15,20,25])
a5=np.arange(0,2,0.3)#初始值0,結束值:2(不包含),步長:0.2
輸出:array([0.,0.3,0.6,0.9,1.2,1.5,1.8])
fromnumpyimportpi
np.linspace(0,2,9)#初始值0,結束值:2(包含),元素個數:9
輸出:
array([0.,0.25,0.5,0.75,1.,1.25,1.5,1.75,2.])
x=np.linspace(0,2*pi,9)
輸出:
array([0.,0.78539816,1.57079633,2.35619449,3.14159265,
3.92699082,4.71238898,5.49778714,6.28318531])
a=np.arange(6)
輸出:
array([0,1,2,3,4,5])
b=np.arange(12).reshape(4,3)
輸出:
array([[0,1,2],
[3,4,5],
[6,7,8],
[9,10,11]])
c=np.arange(24).reshape(2,3,4)
輸出:
array([[[0,1,2,3],
[4,5,6,7],
[8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]])
使用numpy.set_printoptions可以設置numpy變數的列印格式
在ipython環境下,使用help(numpy.set_printoptions)查詢使用幫助和示例
加法和減法操作要求操作雙方的維數信息一致,均為M*N為數組方可正確執行操作。
a=np.arange(4)
輸出:
array([0,1,2,3])
b=a**2
輸出:
array([0,1,4,9])
c=10*np.sin(a)
輸出:
array([0.,8.41470985,9.09297427,1.41120008])
n<35
輸出:
array([True,True,True,True],dtype=bool)
A=np.array([[1,1],[0,1]])
B=np.array([[2,0],[3,4]])
C=A*B#元素點乘
輸出:
array([[2,0],
[0,4]])
D=A.dot(B)#矩陣乘法
輸出:
array([[5,4],
[3,4]])
E=np.dot(A,B)#矩陣乘法
輸出:
array([[5,4],
[3,4]])
多維數組操作過程中的類型轉換
When operating with arrays of different types, the type of the
resulting array corresponds to the more general or precise one (a
behavior known as upcasting)
即操作不同類型的多維數組時,結果自動轉換為精度更高類型的數組,即upcasting
數組索引、切片和迭代
a=np.ones((2,3),dtype=int)#int32
b=np.random.random((2,3))#float64
b+=a#正確
a+=b#錯誤
a=np.ones(3,dtype=np.int32)
b=np.linspace(0,pi,3)
c=a+b
d=np.exp(c*1j)
輸出:
array([0.54030231+0.84147098j,-0.84147098+0.54030231j,
-0.54030231-0.84147098j])
d.dtype.name
輸出:
'complex128'
多維數組的一元操作,如求和、求最小值、最大值等
a=np.random.random((2,3))
a.sum()
a.min()
a.max()
b=np.arange(12).reshape(3,4)
輸出:
array([[0,1,2,3],
[4,5,6,7],
[8,9,10,11]])
b.sum(axis=0)#按列求和
輸出:
array([12,15,18,21])
b.sum(axis=1)#按行求和
輸出:
array([6,22,38])
b.cumsum(axis=0)#按列進行元素累加
輸出:
array([[0,1,2,3],
[4,6,8,10],
[12,15,18,21]])
b.cumsum(axis=1)#按行進行元素累加
輸出:
array([[0,1,3,6],
[4,9,15,22],
[8,17,27,38]])
universal functions
B=np.arange(3)
np.exp(B)
np.sqrt(B)
C=np.array([2.,-1.,4.])
np.add(B,C)
其他的ufunc函數包括:
all,any,apply_along_axis,argmax,argmin,argsort,average,bincount,ceil,clip,conj,corrcoef,cov,cross,cumprod,cumsum,diff,dot,floor,inner,lexsort,max,maximum,mean,median,min,minimum,nonzero,outer,prod,re,round,sort,std,sum,trace,transpose,var,vdot,vectorize,where
a=np.arange(10)**3
a[2]
a[2:5]
a[::-1]#逆序輸出
foriina:
print(i**(1/3.))
deff(x,y):
return10*x+y
b=np.fromfunction(f,(5,4),dtype=int)
b[2,3]
b[0:5,1]
b[:,1]
b[1:3,:]
b[-1]
c=np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])
輸出:
array([[[0,1,2],
[10,11,12]],
[[100,101,102],
[110,111,112]]])
c.shape
輸出:
(2L,2L,3L)
c[0,...]
c[0,:,:]
輸出:
array([[0,1,2],
[10,11,12]])
c[:,:,2]
c[...,2]
輸出:
array([[2,12],
[102,112]])
forrowinc:
print(row)
forelementinc.flat:
print(element)
a=np.floor(10*np.random.random((3,4)))
輸出:
array([[3.,9.,8.,4.],
[2.,1.,4.,6.],
[0.,6.,0.,2.]])
a.ravel()
輸出:
array([3.,9.,8.,...,6.,0.,2.])
a.reshape(6,2)
輸出:
array([[3.,9.],
[8.,4.],
[2.,1.],
[4.,6.],
[0.,6.],
[0.,2.]])
a.T
輸出:
array([[3.,2.,0.],
[9.,1.,6.],
[8.,4.,0.],
[4.,6.,2.]])
a.T.shape
輸出:
(4L,3L)
a.resize((2,6))
輸出:
array([[3.,9.,8.,4.,2.,1.],
[4.,6.,0.,6.,0.,2.]])
a.shape
輸出:
(2L,6L)
a.reshape(3,-1)
輸出:
array([[3.,9.,8.,4.],
[2.,1.,4.,6.],
[0.,6.,0.,2.]])
詳查以下函數:
ndarray.shape,reshape,resize,ravel
a=np.floor(10*np.random.random((2,2)))
輸出:
array([[5.,2.],
[6.,2.]])
b=np.floor(10*np.random.random((2,2)))
輸出:
array([[0.,2.],
[4.,1.]])
np.vstack((a,b))
輸出:
array([[5.,2.],
[6.,2.],
[0.,2.],
[4.,1.]])
np.hstack((a,b))
輸出:
array([[5.,2.,0.,2.],
[6.,2.,4.,1.]])
fromnumpyimportnewaxis
np.column_stack((a,b))
輸出:
array([[5.,2.,0.,2.],
[6.,2.,4.,1.]])
a=np.array([4.,2.])
b=np.array([2.,8.])
a[:,newaxis]
輸出:
array([[4.],
[2.]])
b[:,newaxis]
輸出:
array([[2.],
[8.]])
np.column_stack((a[:,newaxis],b[:,newaxis]))
輸出:
array([[4.,2.],
[2.,8.]])
np.vstack((a[:,newaxis],b[:,newaxis]))
輸出:
array([[4.],
[2.],
[2.],
[8.]])
np.r_[1:4,0,4]
輸出:
array([1,2,3,0,4])
np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]
輸出:
array([[1,2,3,0,0,0,4,5,6]])
詳細使用請查詢以下函數:
hstack,vstack,column_stack,concatenate,c_,r_
a=np.floor(10*np.random.random((2,12)))
輸出:
array([[9.,7.,9.,...,3.,2.,4.],
[5.,3.,3.,...,9.,7.,7.]])
np.hsplit(a,3)
輸出:
[array([[9.,7.,9.,6.],
[5.,3.,3.,1.]]),array([[7.,2.,1.,6.],
[7.,5.,0.,2.]]),array([[9.,3.,2.,4.],
[3.,9.,7.,7.]])]
np.hsplit(a,(3,4))
輸出:
[array([[9.,7.,9.],
[5.,3.,3.]]),array([[6.],
[1.]]),array([[7.,2.,1.,...,3.,2.,4.],
[7.,5.,0.,...,9.,7.,7.]])]
實現類似功能的函數包括:
hsplit,vsplit,array_split
a=np.arange(12)
輸出:
array([0,1,2,...,9,10,11])
notatall
b=a
bisa#True
b.shape=3,4
a.shape#(3L,4L)
deff(x)#,sofunctioncallsmakeno.
print(id(x))#id是python對象的唯一標識符
id(a)#111833936L
id(b)#111833936L
f(a)#111833936L
淺復制
c=a.view()
cisa#False
c.baseisa#True
c.flags.owndata#False
c.shape=2,6
a.shape#(3L,4L)
c[0,4]=1234
print(a)
輸出:
array([[0,1,2,3],
[1234,5,6,7],
[8,9,10,11]])
s=a[:,1:3]
s[:]=10
print(a)
輸出:
array([[0,10,10,3],
[1234,10,10,7],
[8,10,10,11]])
深復制
d=a.()
disa#False
d.baseisa#False
d[0,0]=9999
print(a)
輸出:
array([[0,10,10,3],
[1234,10,10,7],
[8,10,10,11]])
numpy基本函數和方法一覽
Array Creation
arange,array,,empty,empty_like,eye,fromfile,fromfunction,identity,linspace,logspace,mgrid,ogrid,ones,ones_like,r,zeros,zeros_like
Conversions
ndarray.astype,atleast_1d,atleast_2d,atleast_3d,mat
Manipulations
array_split,column_stack,concatenate,diagonal,dsplit,dstack,hsplit,hstack,ndarray.item,newaxis,ravel,repeat,reshape,resize,squeeze,swapaxes,take,transpose,vsplit,vstack
Questionsall,any,nonzero,where
Ordering
argmax,argmin,argsort,max,min,ptp,searchsorted,sort
Operations
choose,compress,cumprod,cumsum,inner,ndarray.fill,imag,prod,put,putmask,real,sum
Basic Statistics
cov,mean,std,var
Basic Linear Algebra
cross,dot,outer,linalg.svd,vdot
完整的函數和方法一覽表鏈接:
https://docs.scipy.org/doc/numpy-dev/reference/routines.html#routines
Ⅶ python中flatmap和map的區別
map( ):接收一個函數,應用到RDD中的每個元素,然後為每一條輸入返回一個對象。
flatMap( ):接收一個函數,應用到RDD中的每個元素,返回一個包含可迭代的類型(如list等)的RDD,可以理解為先Map(),後flat().
Ⅷ 求簡潔優美的python代碼例子、片段、參考資料
樓主貼的那段代碼好像是我寫的那段吧,我來告訴你如何寫出來的吧
首先我不是高手,我也沒有人教,我的編程都是自學的,我只是一個業余愛好者.
寫出這樣的代碼很簡單,就是要多練,我只是把python的基本語法學會,然後就不停地練習,我沒有看過樓上的那些資料,我只是不停地碼代碼,或許有捷徑,但是我沒有發現.
我從07年開始寫python的腳本,我一開始的代碼風格也很差,特別是我先學c++,然後再轉python的,當寫的代碼越來越多,對python的了解就會加深,代碼風格也會自動改變的,不需要著急,其實這就是對一門語言的了解程度,你可以看看我回答的問題,我的回答就是我對python的理解,如果你能堅持下來,相信7年後你寫的代碼會比我寫得更好.
樓上的題目有點意思,我也寫一下,不知道對否
s='''
TheZenofPython,byTimPeters
Beautifulisbetterthanugly.
Explicitisbetterthanimplicit.
Simpleisbetterthancomplex.
.
Flatisbetterthannested.
Sparseisbetterthandense.
Readabilitycounts.
Specialcasesaren'tspecialenoughtobreaktherules.
.
Errorsshouldneverpasssilently.
Unlessexplicitlysilenced.
Inthefaceofambiguity,refusethetemptationtoguess.
Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.
'reDutch.
Nowisbetterthannever.
*right*now.
,it'sabadidea.
,itmaybeagoodidea.
--let'sdomoreofthose!
'''
importre,collections
tail_map={"'s":'is',"'re":'are',"n't":'not'}
data=collections.Counter(re.findall('w+',re.sub("('s|'re|n't)",lambdamatchobj:tail_map[matchobj.group()],s.lower())))
max_len=max(data.values())
print('Totalwordcount:%d',sum(data.values()))
forwordinsorted(data):
print('%*s=>%d'%(max_len,word,data[word]))
Ⅸ 如何成為Python高手
鏈接:https://pan..com/s/1Nb7euy7yqFQqALbBgKzlVw
Python 編程高手之路。本課程分五個階段,詳細的為您打造高手之路,本課程適合有一定python基礎的同學。
用Python可以做什麼?可以做日常任務,比如自動備份你的MP3;可以做網站,很多著名的網站就是Python寫的。總之就是能幹很多很多事。
課程目錄:
第一階段
第一章:用戶交互
第二章:流程式控制制
第三章:數據類型
第四章:字元編碼
第五章:文件處理
第二階段
第六章:函數概述
第七章:閉包函數
......
Ⅹ python 提問
拿出紙和鉛筆,從start()開始,遇到一個函數就用箭頭指向它,自上而下或者自左至右,隨便;出來一個圖後,應該在cthulhu_room()會回調start();接著把箭頭那標上指向它的條件,最後你就明白了。